我的字符串包含变音符号怎么知道?

9
例如 -
text = Československá obchodní banka;

text string contains diacritics like Č , á etc.

我希望编写一个函数,其中我将传递此字符串“Československá obchodní banka”,如果字符串包含变音符号,则函数将返回true,否则返回false
我必须分别处理变音符号和包含不属于A-z或a-z范围的字符的字符串。
1) If String contains diacritics then I have to do some XXXXXX on it.

2) If String contains character other than A-Z or a-z and not contains diacritics  then do some other operations YYYYY.

我不知道如何做。


使用案例是什么?通过“变音符号”,你是不是真的想要查找包含变音符号的字母,或者你指的是任何不在A-Z范围内的字母?那么非拉丁字母如“じ”呢?它可能包含日语中相当于变音符号的东西? - deceze
为什么不检查字符串中的每个字符并将其解析为int,超过127的任何字符都将是一个变音符号。 - David Kroukamp
1
@David 这有点过于简单化了,也正是我之前提问的原因。我不知道“µ”包含变音符号。 - deceze
@deceze 哈哈,对的,写代码时完全忘了你。 :) - David Kroukamp
我必须分别处理带有变音符号的字符和包含不在A-z或a-z范围内的字符的字符串。 - Pramod Kumar
2个回答

13

Unicode中存在一个代表á的编码,但是也可以通过a组合标记-'来得到相同的结果。

您可以使用java.text.Normalizer进行处理,如下:

public static boolean hasDiacritics(String s) {
    // Decompose any á into a and combining-'.
    String s2 = Normalizer.normalize(s, Normalizer.Form.NFD);
    return s2.matches("(?s).*\\p{InCombiningDiacriticalMarks}.*");
    //return !s2.equals(s);
}

我更正了我的答案:如果原始字符串已经包含一个分解的a`,那么等于测试将不会成功。 - Joop Eggen

5

看起来,Normalizer类可以实现这一点。一些有限的测试表明:

Normalizer.isNormalized(text, Normalizer.Form.NFD)

也许这正是你所需要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接