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/38866965/

相关文章:

php - json_encode 与 mysql 内容和 utf-8 中的变音符号

java - 如何使用 Jena 库从 Java 中的本体读取所有对象属性?

java - 显示来自 JSON Android 的 GridView 图像

c++ - 如何使模板重新推导出已经衰减为 const char* 的 const char[N] "mychar"?

java - 如何操作一串 INSERT 数据并以正确的方式分隔列的值?

ios - URL AFNetworking GET 中的变音符号

java - 我的数据库不支持创建的查询

java - 使用 pop3 按日期降序获取邮件

c - 包含字符串的数组

Javascript 正则表达式只接受字母、空格和 ñ