Java中如何将形似英文字母的非英文字符转换为英文字母?
解决西里尔形似英文字符转对应英文字母的问题
你的代码之所以输出699,是因为О(U+041E,西里尔大写字母O)和Х(U+0425,西里尔大写字母Kha)属于非ASCII字符,replaceAll("[^\\x00-\\x7F]", "")会直接把所有不在ASCII范围内的字符删掉,而Normalizer.normalize在这里起不到作用——它主要用于处理Unicode字符的重音分解,对这类无重音的西里尔字母无效。
要实现把形似英文字母的西里尔字符转成对应英文字母,你需要手动定义字符映射关系,然后逐个替换。以下是几种可行的实现方式:
1. 简单直接的替换(适合少量字符)
如果只需要处理О、Х这类少数字符,直接用replace方法即可:
String subjectString = "ОХ699"; String resultString = subjectString .replace('О', 'O') .replace('Х', 'X') // 如需处理小写,添加对应替换 .replace('о', 'o') .replace('х', 'x'); System.out.println(resultString); // 输出 OX699
2. 基于映射表的替换(适合大量字符)
如果需要处理更多形似字符(比如西里尔的С→C、Е→E等),用Map存储映射关系会更易维护:
import java.util.HashMap; import java.util.Map; public class CyrillicConverter { // 预定义常见形似西里尔字符到英文字母的映射 private static final Map<Character, Character> CYRILLIC_LATIN_MAP = new HashMap<>(); static { CYRILLIC_LATIN_MAP.put('О', 'O'); CYRILLIC_LATIN_MAP.put('Х', 'X'); CYRILLIC_LATIN_MAP.put('о', 'o'); CYRILLIC_LATIN_MAP.put('х', 'x'); CYRILLIC_LATIN_MAP.put('С', 'C'); CYRILLIC_LATIN_MAP.put('с', 'c'); CYRILLIC_LATIN_MAP.put('Е', 'E'); CYRILLIC_LATIN_MAP.put('е', 'e'); CYRILLIC_LATIN_MAP.put('А', 'A'); CYRILLIC_LATIN_MAP.put('а', 'a'); // 可根据需求继续添加其他映射 } public static String convert(String input) { StringBuilder result = new StringBuilder(); for (char c : input.toCharArray()) { // 存在映射则替换,否则保留原字符 result.append(CYRILLIC_LATIN_MAP.getOrDefault(c, c)); } return result.toString(); } public static void main(String[] args) { System.out.println(convert("ОХ699")); // 输出 OX699 } }
3. 正则批量替换
也可以用正则表达式一次性替换所有目标字符:
String subjectString = "ОХ699"; String resultString = subjectString .replaceAll("[Оо]", "O") .replaceAll("[Хх]", "X"); System.out.println(resultString);
内容的提问来源于stack exchange,提问作者Ankita Rajput
相关产品推荐
相关产品推荐

