【问题标题】:Java string replace special characters (Bulgarian, Polish, German) [duplicate]Java字符串替换特殊字符(保加利亚语,波兰语,德语)[重复]
【发布时间】:2018-08-08 16:36:42
【问题描述】:

我有一个字符串姓氏。

我想替换特殊的保加利亚语。带有英语标准替换的波兰语字符。

例如 surname = "Tuğba Delioğ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

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

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

这将是相当大的量,因此寻找最有效的方法。

【问题讨论】:

  • 波兰语中 Ł 的替换是 L,而不是 l ;)

标签: java arrays string localization character


【解决方案1】:

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

删除某些字符是一种特殊情况。为此,您需要第二个布尔数组。

这是代码的草图:

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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    相关资源
    最近更新 更多