/**
* 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}+", "");
}
6条答案
按热度按时间ou6hu8tu1#
你可以循环你的字符串和每个字符的调用
hmae6n7t2#
班级
Character
还提供了一些有趣的方法。看看吧。guicsvcw3#
我不清楚转化“a”究竟能得到什么ü十ü" 到“ayxy”。这是因为ü 在一种特定的语言中发音像y吗?什么语言?还有什么其他规则可以适用?
在术语方面。。。
上面是一个unicode字符串。它包含一个utf-16编码字符。
如果您希望将字符范围限制为英语字母,请查看此答案中执行的规范化。
monwx1rj4#
“unicode字符”的定义很模糊,但将被视为标准iso 8859字符集未涵盖的utf-8字符。如果在您的例子中是这样,则循环遍历字符串中的所有字符,并测试其代码点以确定它是否在给定的字符集中。
或者,使用
Map<Character, Character>
以及Map中包含匹配键的字符。例如:或者,你的意思是“所有带音调符号的字符”?如果是,则使用
java.text.Normalizer
要删除音调符号:一个陷阱,ü 会变成u,而不是y。不知道你是不是在找这个。如果要用发音字符替换,则确实需要创建Map。当然,这是一个乏味的工作,但它做的时间比你需要遵循这个主题。
sauutmhj5#
你可以反过来问这个字符是不是ascii字符。
当然,你必须逐个分析字符串。
(该方法来自commons lang charutils,其中包含大量有用的字符方法)
qcuzuvrc6#
从您的示例中,我不确定您要做什么-如果您只是尝试用y替换所有非ascii值,那么您可以在字符串中循环查找0到127范围之外的代码点,并用y替换这些代码点。