我想将字符串部分(即字符)与中文字符进行比较。我假设由于Unicode编码它计为两个字符,所以我以2为增量循环遍历字符串。现在我遇到了一个路障,我试图探测到这个儿童的问题。角色,但equals()
并不匹配,所以我错过了什么?这是代码段:
for (int CharIndex = 0; CharIndex < tmpChar.length(); CharIndex=CharIndex+2) {
// Account for 'r' like in dianr/huir
if (tmpChar.substring(CharIndex,CharIndex+2).equals("兒")) {
另外,请随意提出一种更优雅的解析方法...
[更新] 调试器中的一些图片显示它不匹配,即使它应该。我从我用作输入的电子表格中粘贴了中文字符,因此我不认为它是一个复制和粘贴问题(除非unicode在此过程中丢失)
哦,当然,显然它不能简单地复制和粘贴:
答案 0 :(得分:0)
使用CharSequence.codePoints()
,它返回代码点流,而不是处理字符:
session.CreateTopic("topic://Score/Football")
(当然,您可以使用tmpChar.codePoints().forEach(c -> {
if (c == '兒') {
// ...
}
});
)。
答案 1 :(得分:0)
两个字符,接受兒
作为子字符串。
String s = ...;
if (s.contains("兒")) { ... }
int position = s.indexOf("兒");
if (position != -1) {
int position2 = position + "兒".length();
s = s.substring(0, position) + "*" + s.substring(position2);
}
if (s.startsWith("兒", i)) {
// At position i there is a 兒.
}
或代码点,它将是一个代码点。因为这并不容易,变量子串看起来很好。
答案 2 :(得分:0)
if (tmpChar.substring(CharIndex,CharIndex+2).equals("兒")) {
你的问题。儿只是一个UTF-16角色。许多中文字符可以用UTF-16表示在一个代码单元中; Java使用UTF-16。但是,其他字符是两个代码单元。
String
课程中有各种API可供处理。
正如另一个答案中所提到的,从IntStream
获取codepoints
允许您为每个字符获取32位代码点。您可以将其与您要查找的角色的代码点值进行比较。
或者,您可以使用ICU4J库以及更丰富的设施。