【问题标题】:Java String length not working properly [closed]Java字符串长度无法正常工作[关闭]
【发布时间】:2018-07-04 14:33:17
【问题描述】:

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

}

【问题讨论】:

  • 字母前有一个不可打印的字符。见HERE
  • 这不是“返回”任何东西(它不应该,因为返回类型是void)。
  • 这样做:for (char c : cadena.toCharArray()) { System.out.printf("char: %d, %s%n", (int) c, c); }
  • 什么意思? System.out.println 都应该打印 1
  • @Victor 检查图像。你有两个角色。即使你只看到一个。这就是“不可打印字符”的意思:你看不到它,但它就在那里。输出是正确的。

标签: java string string-length


【解决方案1】:

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

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

将打印:

8206
65

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

【讨论】:

  • 谢谢大家。你知道如何删除除字母之外的所有字符。我试过这个没有成功:replaceAll("\\s", "");
  • 如果您需要清理输入数据,请使用白名单方法,而不是排除。它更安全。见this answer
【解决方案2】:

您在A 中有隐形字符。两者不一样

   System.out.println(cadena.hashCode());
   System.out.println("‎A".hashCode());
   System.out.println("‎A".equals(cadena));

输出:

65
254451
false

【讨论】:

    【解决方案3】:

    这总是会打印出来的:

    1
    1
    

    在正常情况下。

    在您的情况下,您似乎在"A" 中的A 之前有一些垃圾/不可打印字符

    我建议你删除并重写短语"A"

    【讨论】:

      【解决方案4】:

      我尝试在线编译你的代码here,因为我的电脑中没有java,我看到你有this character(从左到右标记)

      您可以删除字符串并重新输入。 :)

      【讨论】:

        【解决方案5】:

        从上一个答案中可以看出有一个不可见的字符

        "‎A".chars() .forEach(i -> System.out.println("there is a char:" + (char)i));
        

        将打印:

        there is a char:‎
        there is a char:A
        

        我想有人想用这个隐形角色跟你开个玩笑。

        --编辑--

        在 Java 中为您的字符串删除 控制字符,您可以使用正则表达式:

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-22
          • 1970-01-01
          • 1970-01-01
          • 2013-01-06
          • 2014-11-06
          • 1970-01-01
          • 2017-02-18
          相关资源
          最近更新 更多