我们在输入中接受UTF-8字符串中的各种本国字符,并且需要将其转换为输出中的ASCII字符串以用于某些传统用途。 (我们不接受中文和日文字符,仅接受欧洲语言)

我们有一个小工具可以消除所有变音符号:

public static final String toBaseCharacters(final String sText) {
    if (sText == null || sText.length() == 0)
        return sText;

    final char[] chars = sText.toCharArray();
    final int iSize = chars.length;
    final StringBuilder sb = new StringBuilder(iSize);

    for (int i = 0; i < iSize; i++) {
        String sLetter = new String(new char[] { chars[i] });
        sLetter = Normalizer.normalize(sLetter, Normalizer.Form.NFC);

        try {
            byte[] bLetter = sLetter.getBytes("UTF-8");
            sb.append((char) bLetter[0]);
        } catch (UnsupportedEncodingException e) {
        }
    }
    return sb.toString();
}

问题是如何用其补充字符替换所有通过上述归一化方法获得的德国尖锐字符s(ß,Đ,đ)和其他字符(如果是ß,则补充字符可能是“ss”,如果是odĐ补码可以是“D”或“Dj”)。

有没有数百万个.replaceAll()调用的简单方法?

例如:Đonardan= Djonardan,Blaß= Blass,依此类推。

我们可以将所有“有问题的”字符替换为空白,但要避免这种情况,以使输出尽可能类似于输入。

谢谢您的回答,

博佐

最佳答案

有没有数百万个.replaceAll()调用的简单方法?

如果仅支持基于拉丁语的欧洲语言,则大约100种就足够了;那绝对是可行的:抓住Unicode charts以获得Latin-1 SupplementLatin Extended-A并开始String.replace派对。 :-)

07-24 09:26