如何检查java字符串是否包含组合字符?
维基百科页面指定了一些字符,但我相信不是全部,我也检查了unicode v9.0数据表,不知道字符是如何标记的。
维基百科页面
Unicode9 data db
样本:
String a="Java is evil";//does not contain any combining char
String b=" ̤U";// ̤ + U( the ̤ is combining)
//or ផ្លូ which means ផ្ + លូ , or គ្នា is គ្ + នា
可以使用正则表达式来匹配组合标记,例如
String a = "Java is evil";
String b = "Uu0324";
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
来自 http://www.unicode.org/reports/tr44/#Canonical_Combining_Class
(3) 规范排序算法中使用的类 统一码标准。
(3) 表示 unicode 数据表中码位值之后的第三个字段。如果它不为零,则根据 http://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values 处的表,它是某种组合字符。
祝你好运,有很多:)
唯一的方法是创建自己的这些字符组合在一起的地图。我建议你多次使用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);