如何替换类似的西里尔字母和英文字符

时间:2015-01-12 12:35:46

标签: java string

我有一个文本框,用户可以用Java输入带字母和数字的字符串,即

String inputString =“Аs87df56VСХ6ВР”;

此外,用户可能会忘记切换语言并使用西里尔字母输入此字符串,因为西里尔字母和英文字母表中有相似的字符: ABCEHKMOPTX

我的问题是:如何在输入字符串中查找和替换西里尔字母?

3 个答案:

答案 0 :(得分:5)

使用Apache common-lang库的replaceChars()类中的StringUtils实用程序方法。

str = StringUtils.replaceChars(str, "АВЕЅZІКМНОРСТХШѴУ", "ABESZIKMHOPCTXWVY");

我在这段代码中使用了实际的西里尔字符(所以你可以复制粘贴它)并添加了几个类似的字母。

答案 1 :(得分:1)

我建议使用HashMap保留所有映射,然后替换它们,如代码段中所示

HashMap<Character, String> mapping = new HashMap<>();
mapping.put('\u0410', "A");
mapping.put('\u0412', "B");
mapping.put('\u0421', "C");
mapping.put('\u0415', "E");
mapping.put('\u041D', "H");
mapping.put('\u041A', "K");
mapping.put('\u041C', "M");
mapping.put('\u041E', "O");
mapping.put('\u0420', "P");
mapping.put('\u0422', "T");
mapping.put('\u0423', "Y");
mapping.put('\u0425', "X");

// String contains latin+cyrillic characters
String input = "AАBВCСEЕHНKКMМOОPРTТYУXХ";
StringBuilder sb = new StringBuilder(input.length());
for (Character c : input.toCharArray()) {
    if (c > 'Z') {
        System.out.printf("add latin: %s  for cyrillic: %s%n", mapping.get(c), c);
        sb.append(mapping.get(c));
    } else {
        System.out.printf("add latin: %s%n", c);
        sb.append(c);
    }
}

答案 2 :(得分:0)

一个缓慢但简单的解决方案是制作2个字符串,只有你想要替换的字符:

String yourtext = " this is a sample text";
String cyrillic = "ABHOP..."
String latin = "ABNOP..."
for(int i = 0;i<yourtext.length();i++){
    for(int j = 0;j<latin.length();j++){
        if( latin.charAt(j) == yourtext.charAt(i)){
        yourtext = changeCharInPoistion(i,cyrillic.charAt(j), yourtext);
        }
    }
}

public String changeCharInPosition(int position, char ch, String str){
char[] charArray = str.toCharArray();
charArray[position] = ch;
return new String(charArray);
}