检查java字符串是否包含组合字符

时间:2016-03-07 20:24:32

标签: java string text unicode

如何检查java字符串是否包含组合字符?

维基百科页面指定了一些字符,但我相信它不是全部,我也检查了unicode v9.0数据表,不知道字符是如何标记的。

enter image description here

wikipedia page

样品:

String a="Java is evil";//does not contain any combining char
String b=" ̤U";// ̤  + U( the  ̤  is combining) 
//or ផ្លូ which means ផ្ + លូ , or គ្នា is គ្ + នា

3 个答案:

答案 0 :(得分:3)

可以使用regular expressions to match combining marks,例如

String a = "Java is evil";
String b = "U\u0324";
java.util.regex.Pattern p = java.util.regex.Pattern.compile("\\p{M}");
System.out.println(p.matcher(a).find());
System.out.println(p.matcher(b).find());

输出:

false
true

答案 1 :(得分:1)

来自http://www.unicode.org/reports/tr44/#Canonical_Combining_Class

  

(3)用于规范排序算法的类   Unicode标准。

(3)表示unicode数据表中的代码点值之后的第三个字段。如果它不为零,则根据http://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values的表格,它是某种组合字符。

祝你好运,其中有很多:)

答案 2 :(得分:0)

唯一的方法是创建自己的这些字符组合在一起的地图。我建议您多次使用Map<String, Map<String, String>>

一种非常简单的方法是将这些组合分别放在具有以下模式的文本文件中:

ý ´ y
ä ¨ a
...

然后阅读文件并保存到多个地图。

Map<String, Map<String, String>> map = new HashMap<>();

// Looping, reading all lines
    String line; // A line from the file
    String part[] = line.split(" "); // Separate line with a space delimiter
    Map<String, String> tempMap = new HashMap<>();
    tempMap.put(part[1], part[2]);
    map.put(part[0], tempMap);