我们在输入的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();
}
问题是如何替换所有通过上述规范化方法传递的德文sharp s (ß,Đ,đ)和其他字符,以及它们的补充(在ß的情况下,补充可能是"ss",而在Đ的情况下,补充可能是"D"或"Dj")。
有没有一些简单的方法可以做到这一点,而不用进行数百万次的.replaceAll()调用?
例如:Đonardan = Djonardan,Blaß = Blass等。
我们可以用空格替换所有“问题”字符,但希望避免这样做,使输出尽可能类似于输入。
谢谢您的答案,
Bozo