附加字符串时出现问题,使其环绕Java

附加字符串时出现问题,使其环绕Java,java,string,Java,String,我将此变量指定给使用: String[] lineSplit = line.split(" "); String output = lineSplit[4]; 当我使用System.out.println(输出)时,它输出:z(它从字符串中获取)。但是当我打印System.out.println(输出+”)时,它输出: 我做了更多的测试,比如:System.out.println(“Output”+Output+”),它输出:.utput z 我不知道是什么导致了这一点,我

我将此变量指定给使用:

String[] lineSplit = line.split(" ");
String output = lineSplit[4];
当我使用
System.out.println(输出)
时,它输出:
z
(它从字符串中获取)。但是当我打印
System.out.println(输出+”)
时,它输出:

我做了更多的测试,比如:
System.out.println(“Output”+Output+”)
,它输出:
.utput z

我不知道是什么导致了这一点,我也不知道要搜索什么才能找到错误

更多信息:

  • 文本是从文件中读取的(因此可能存在编码问题?)
  • 对其进行检查(使用
    =
    .equals
    )无效
  • System.out.println(output+“)的末尾添加更多字符
    将替换开头的更多字符
  • 没有错误或警告(使用IntelliJ)

    • 可能是
      输出
      包含以下字符串:

      "z\r"
      
      这里的关键是它包含一个回车字符(CR/
      \r
      )。这可能意味着在某些OSs中是一个新行(请参阅使用CR作为新行的OSs)。鉴于字符串来自一个文件,这似乎是完全可能的

      要验证这一点,请在字符串中循环,查看是否找到
      \r
      字符:

      int cr = '\r';
      boolean found = output.chars().anyMatch(x -> x == cr);
      System.out.println(found);
      
      如果您打印
      output.chars()
      的每个元素,这样您就可以准确地知道
      output
      中的内容,而不必猜测:)

      无论如何,我的macOS终端(可能还有您正在使用的任何控制台)不会将CR视为新行,而是将光标移动到当前行的开头,就像打字机一样。因此,
      \r
      后面的字符将覆盖行首的字符


      OTOH,当我的IntelliJ控制台看到CR后面的任何字符时,它会删除CR之前的所有内容,因此这实际上取决于您使用的控制台。

      可能是
      输出包含以下字符串:

      "z\r"
      
      这里的关键是它包含一个回车字符(CR/
      \r
      )。这可能意味着在某些OSs中是一个新行(请参阅使用CR作为新行的OSs)。鉴于字符串来自一个文件,这似乎是完全可能的

      要验证这一点,请在字符串中循环,查看是否找到
      \r
      字符:

      int cr = '\r';
      boolean found = output.chars().anyMatch(x -> x == cr);
      System.out.println(found);
      
      如果您打印
      output.chars()
      的每个元素,这样您就可以准确地知道
      output
      中的内容,而不必猜测:)

      无论如何,我的macOS终端(可能还有您正在使用的任何控制台)不会将CR视为新行,而是将光标移动到当前行的开头,就像打字机一样。因此,
      \r
      后面的字符将覆盖行首的字符


      OTOH,我的IntelliJ控制台在看到CR后面的任何字符时,只会删除CR之前的所有内容,因此这实际上取决于您使用的控制台。

      line变量的值是什么它看起来像
      输出
      包含多字节字符,不能很好地处理ascii。什么是
      System.out.println(Arrays.toString(output.getBytes())
      print?line变量的值是多少看起来
      output
      包含的多字节字符与ascii不兼容。什么是
      System.out.println(Arrays.toString(output.getBytes())
      print?就是这样。每次有新行时,代码都返回true,当我删除代码时,代码运行良好!谢谢,就这样。每次有新行时,代码都返回true,当我删除代码时,代码运行良好!谢谢