Java字符串。用其他字符列表替换字符列表

时间:2015-09-16 09:31:38

标签: java arrays string

我有一个带有value-f.e的String变量: this is test-str-ing_łóśżćń

我想替换这个字符:

-łóśżćń 与那些:

__loszcn

我的意思是,如果解析器会发现fe:char -(第一个列表中的第二个)应该替换为第二个列表中位于相同位置/位置的char,在本例中是:_

char ó应替换为char o

char ń应替换为char n

在我的情况下,要替换的字符列表很长,并且循环解析每个要替换的字符都不会有效。

我知道方法replaceAll()。但它只接受String中的一个和String

中的一个

所以我正在寻找方法,这将允许我处理数组/字符串列表而不是单个字符串。

请给我一些帮助。

3 个答案:

答案 0 :(得分:3)

使用java.text.Normalizer分解基本字母中的重音字母加上#34;组合变音符号。"

String base = Normalizer.normalize(accented, Form.NFKD)
    .replaceAll("\\p{M}", "");

这会分解(D)规范化,然后删除标记。

仍需要一些替代品。

答案 1 :(得分:1)

    char[] out = new char[src.length()];
    for( j ...){
    inputChar = src.charAt(j);
    for (int i = 0; i < convertChars.length; i++) {
       if (inputChar == convertChars[i]) {
         inputChar = toChars[i];
       }
     }
    }
     out[j] = inputChar ;
   }
    out2 = new String(out);

从没有IDE的更大代码中提取,未经过测试。循环(我希望)不要分配对象,不应该降低速度。

答案 2 :(得分:0)

制作静态查询表:

private static char[] substitutions = new char[65536];
static {
    // Initialize
    for (char c = 0; c < substitutions.length; c++) {
        substitutions[c] = c;
    }
    // Now add mappings.
    substitions['-'] = '_'; // Map source->target character
    ... // Add the rest
}
// LATER IN Code
char[] stringChars = inputString.toCharArray();
for (int i = 0; i < stringChars.length; i++) {
    stringChars[i] = substitutions[stringChars[i]];
}
outputString = new String(stringChars);