java - 有没有办法摆脱重音符号并将整个字符串转换为常规字母?

标签 java string diacritics

除了使用 String.replaceAll() 方法和一个一个替换字母之外,还有没有更好的方法可以消除重音符号并使这些字母规则? 示例:

输入:orčpžsíáýd

输出:orcpzsiayd

它不需要包括所有带有重音符号的字母,例如俄语字母或中文字母。

最佳答案

使用java.text.Normalizer为您处理。

string = Normalizer.normalize(string, Normalizer.Form.NFD);
// or Normalizer.Form.NFKD for a more "compatible" deconstruction 

这会将所有重音符号与字符分开。然后,您只需将每个字符与一个字母进行比较,然后将不是的字符丢弃。

string = string.replaceAll("[^\\p{ASCII}]", "");

如果你的文本是 unicode,你应该改用这个:

string = string.replaceAll("\\p{M}", "");

对于 unicode,\\P{M} 匹配基本字形,\\p{M}(小写)匹配每个重音符号。

感谢 GarretWilson 的指点和 regular-expressions.info对于伟大的 unicode 指南。

关于java - 有没有办法摆脱重音符号并将整个字符串转换为常规字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3322152/

相关文章:

xml - xml 文件中的 å 是否有效?

python - 如何在 Python 中用 ascii 字符替换 unicode 字符(给定的 perl 脚本)?

java - Neo4J 和 Spring 返回空关系

java - 在容器中心添加面板

javascript - 通过主题标签拆分字符串并使用 jQuery 保存到数组中?

c# - 字符串替换 - C#

java - 如何从正则表达式捕获文本?

java - Pentaho 数据源向导

python - 如何一次而不是顺序替换多个子字符串?

oracle - 不区分大小写和重音的 'like' 比较 oracle 而不改变 oracle 上的 session