Java字符串长度无法正常工作

时间:2018-07-04 14:33:18

标签: java string string-length

我在这堂课上孤立了我原来的问题。它正在返回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());
    }

}

5 个答案:

答案 0 :(得分:2)

您的"‎A"实际上是两个代码点的序列,一个不可打印的代码点,后跟一个大写的A字母。

"‎A".codePoints().forEach(System.out::println);

将打印:

8206
65

8206是Unicode Character 'LEFT-TO-RIGHT MARK' (U+200E)字符。

答案 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)

由于我的电脑中没有Java,因此我尝试在线编译您的代码here,并且看到您有this character(从左到右的标记)

您只需删除字符串并重新输入即可。 :)