如何使用' equals()'来比较Java中的汉字。

时间:2017-07-16 00:02:11

标签: java android unicode asianfonts

我想将字符串部分(即字符)与中文字符进行比较。我假设由于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在此过程中丢失)

enter image description here

enter image description here

哦,当然,显然它不能简单地复制和粘贴:

enter image description here

3 个答案:

答案 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库以及更丰富的设施。