我在这堂课上孤立了我原来的问题。它正在返回2 2
。第一次执行此代码时,我得到了1 1
,我快要疯了,我不明白这种行为
public class Test {
public static void main(String[] args) {
test("A");
}
public static void test(String cadena) {
System.out.println(cadena.length());
System.out.println("A".length());
}
}
答案 0 :(得分:2)
您的"A"
实际上是两个代码点的序列,一个不可打印的代码点,后跟一个大写的A字母。
"A".codePoints().forEach(System.out::println);
将打印:
8206
65
答案 1 :(得分:1)
您在A
中有不可见的字符。两者都不一样
System.out.println(cadena.hashCode());
System.out.println("A".hashCode());
System.out.println("A".equals(cadena));
输出:
65
254451
false
答案 2 :(得分:0)
这将始终打印:
1
1
在正常情况下。
在您的情况下,您在A
中的"A"
之前似乎有 一些垃圾邮件/不可打印的字符 。
建议您删除并重写短语"A"
。
答案 3 :(得分:0)
好,上一个答案中有一个看不见的人物
"A".chars() .forEach(i -> System.out.println("there is a char:" + (char)i));
将打印:
there is a char:
there is a char:A
我认为有人想用这个看不见的角色向你开玩笑。
-编辑-
在Java中为字符串删除控制字符时,您可以使用Regex:
public static void test(String cadena) {
System.out.println(cadena.length());
"A".chars() .forEach(i -> System.out.println("there is a char:" + (char)i));
String b ="A".replaceAll("\\p{C}","");
System.out.println(b.length());
b.chars() .forEach(i -> System.out.println("there is a char:" + (char)i));
}
输出:
2
there is a char:
there is a char:A
1
there is a char:A
答案 4 :(得分:0)