为什么indexOf不能正确返回Unicode字符的位置?

3

我不明白为什么使用Unicode表示字符时,如果使用indexOf方法就无法得到正确的结果?

public class Test {
    public static void main(String[] args) {
        String strg = "Dog?Cat";
        System.out.println("String: " + strg);
        System.out.println("Char: " + strg.indexOf('?'));
        System.out.println("String: " + strg.indexOf(new String("?")));
        System.out.println("Sign: " + String.valueOf('\u0134'));
        System.out.println("Unicode: " + strg.indexOf(String.valueOf('\u0134')));
    }
}

结果:

String: Dog?Cat
Char: 3
String: 3
Sign: ?
Unicode: -1   --> Why is it -1 ?! Why not 3 ?

你能帮我吗?谢谢!


你的环境采用的编码是什么? - Rohit Jain
因为您的字符串中不包含字符[U+0134](https://codepoints.net/U+0134)。注意:此字符不是问号字符。 - Jesper
1个回答

5

String.valueOf('\u0134') 不是 '?' 字符。许多不可打印的字符(如 '\u0134')会被 System.out.println 打印成 '?',但你的字符串 "Dog?Cat" 中并不包含 '\u0134' 字符。

这将给出预期的 3:

String strg = "Dog?Cat";
System.out.println("Unicode: " + strg.indexOf(String.valueOf('\u003f')));

谢谢,是的,我现在知道为什么了! - MuellerDavid

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