Java字符串替换特殊字符(保加利亚语,波兰语,德语)[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java字符串替换特殊字符(保加利亚语,波兰语,德语)[重复]相关的知识,希望对你有一定的参考价值。

我有一个字符串姓氏。

我想取代特别的保加利亚人。波兰字符替换英文标准。

例如姓氏=“TuğbaDelioğlu”

最终输出字符串应为:tugbadelioglu


为了实现这一点,我刚刚完成了一系列string.replaceAll,如下所示: -

surname = surname.replaceAll("ı", "i");
surname = surname.replaceAll("ł", "l");
surname = surname.replaceAll("Ł", "l");
surname = surname.replaceAll("ń", "n");
surname = surname.replaceAll("ğ", "g");

surname = surname .replaceAll("\p{InCombiningDiacriticalMarks}+", ""); // this will remove diacritics

String newSurname = surname.replaceAll("[^a-zA-Z]",""); // remove non A-Z characters 

surname = surname.replaceAll("\s","").toLowerCase(); // remove spaces and make lowercase

有没有更有效的方法来做到这一点,即有一个数组: - 替换字符替换字符

然后遍历字符串并用数组中的表示替换每个匹配的字符?

这将是相当高的量,所以寻找最有效的方法来做到这一点。

答案

你可以做的是创建一个字符数组,它将每个字符映射到应该被替换的字符(如果不需要替换,则为相同的字符)。然后你可以通过字符串(最好作为一个字符数组传递)并盲目地用它应该替换的字符替换每个字符。

删除一些字符有一个特殊情况。你需要第二个布尔数组。

这是代码的草图:

char[] replacements = new char[Character.MAX_VALUE];
boolean[] removals = new boolean[Character.MAX_VALUE];
// fill these arrays
// like replacements['ł'] = 'l';

public String replaceSpecialBulgarianCharacters(String str) {
    char[] s = str.toCharArray();
    StringBuilder sb = new StringBuilder(s.length);
    for (int index = 0; index < s.length; index++) {
        char c = s[index];
        if (!removals[c]) {
            sb.append(replacements[c]);
        }
    }
    return sb.toString();
}

以上是关于Java字符串替换特殊字符(保加利亚语,波兰语,德语)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java替换特殊字符的方法是啥 做好Java必须会的内容就在这里了

java替换特殊字符串

java用正则表达式判定特殊字符是不是,存在就替换的问题?

java怎样获取特殊字符的位置

Java 特殊字符正则替换

String的replace方法怎么转换带有特殊字符的子字符串?