如何检测 Java 字符串中的 Unicode 字符?
假设我有一个包含 Ü 的字符串。如何找到所有这些 Unicode 字符?我应该测试他们的代码吗?我该怎么做?
例如,给定字符串“AÜXÜ”,我想将其转换为“AYXY”。我想对其他 Unicode 字符做同样的事情,我不想将它们存储在某种翻译映射中。
假设我有一个包含 Ü 的字符串。如何找到所有这些 Unicode 字符?我应该测试他们的代码吗?我该怎么做?
例如,给定字符串“AÜXÜ”,我想将其转换为“AYXY”。我想对其他 Unicode 字符做同样的事情,我不想将它们存储在某种翻译映射中。
您可以遍历字符串并针对每个字符进行调用
If (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) {
// replace with Y
}
“unicode 字符”的定义很模糊,但将被理解为标准 ISO 8859 字符集未涵盖的 UTF-8 字符。如果在这种情况下情况确实如此,请遍历 String 中的所有字符并测试其代码点,以确定它是否在给定的字符集内。
或者,在包含匹配键的映射中使用 和 字符。例如:Map<Character, Character>
Map<Character, Character> charReplacementMap = new HashMap<Character, Character>() {{
put('Ü', 'Y');
// Put more here.
}};
String originalString = "AÜAÜ";
StringBuilder builder = new StringBuilder();
for (char currentChar : originalString.toCharArray()) {
Character replacementChar = charReplacementMap.get(currentChar);
builder.append(replacementChar != null ? replacementChar : currentChar);
}
String newString = builder.toString();
或者,您的意思是“所有带有变音符号的字符”?如果是这样,则使用 java.text.Normalizer
删除变音符号:
/**
* Remove any diacritical marks (accents like ç, ñ, é, etc) from
* the given string (so that it returns plain c, n, e, etc).
* @param string The string to remove diacritical marks from.
* @return The string with removed diacritical marks, if any.
*/
public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string, Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
一个陷阱,Ü会变成U,而不是Y。不确定这是否是你所追求的。如果要替换为发音字符,则确实需要创建映射。当然,这是一项繁琐的工作,但它完成的时间比您遵循本主题所需的时间要短。