附加字符串时出现问题,使其环绕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,当我删除代码时,代码运行良好!谢谢