为什么在将char与另一个char进行比较时,还必须从字符串中获取?例如;
这不起作用
while(i < t.length() && zeroCount < 5) {
if(t.charAt(i) == 0){
zeroCount++;
}
i++;
}
这也不是
char zero = 0;
while(i < t.length() && zeroCount < 5) {
if(t.charAt(i) == zero){
zeroCount++;
}
i++;
}
我设法让它运作的唯一方法就是这样......
String zeros = "0000000000";
while(i < t.length() && zeroCount < 5) {
if(t.charAt(i) == zeros.charAt(i)){
zeroCount++;
}
i++;
}
任何人都可以解释我做错了什么,或者像前2个例子那样做是不可接受的。如果是这样,为什么?
答案 0 :(得分:10)
你很困惑
char zero = 0;
与
char zero = '0';
前者是空字符(ASCII值为零),而后者是表示数字零的字符。
这种混乱是C的一个相当不幸的问题,char
个变量被视为数字和字符。
答案 1 :(得分:4)
您正在寻找角色'0'?然后比较'0',而不是0.
答案 2 :(得分:4)
您正在与Unicode值0(又名U + 0000,“空”字符)进行比较 - 这与表示数字0 的Unicode字符不同。
使用'0'代替0:
while(i < t.length() && zeroCount < 5) {
if(t.charAt(i) == '0'){
zeroCount++;
}
i++;
}
答案 3 :(得分:3)
使用'0'代替0。
答案 4 :(得分:3)
简单的答案是值0
与ASCII码'0'
(IIRC)的字符48
不同。
您应该将它与char值charAt(i) == '0'
进行比较,或者在比较前减去char charAt(i) - '0' == 0
答案 5 :(得分:3)
这些其他答案是正确的,但有一件非常重要的事情你应该知道。你永远不应该使用chatAt
!您应该只使用codePointAt
。
同样,你不能盲目地使用i++
来突破字符串。您需要了解s.codePointAt(i) > Character.MAX_VALUE
是否要提供额外的i++
踢球者。
例如,以标准“U +”表示法打印出String s
中的所有代码点:
private static void say_U_contents(String s) {
System.out.print("U+");
for (int i = 0; i < s.length(); i++) {
System.out.printf("%X", s.codePointAt(i));
if (s.codePointAt(i) > Character.MAX_VALUE) { i++; } // UG!
if (i+1 < s.length()) { System.out.printf("."); }
}
}
通过这种方式,您可以为相应的字符串输出U+61.DF
,U+3C3
和U+1F4A9.1F4A9
。最后一个看起来像"\uD83D\uDCA9\uD83D\uDCA9"
,这简直就是疯了。