为什么Java Eclipse中System.lineSeparator()的字符串不相等

为什么Java Eclipse中System.lineSeparator()的字符串不相等,java,string,eclipse,Java,String,Eclipse,我正在编写一个函数,将字符串每行的第一个字母大写。因此,以下输入: String test="this is a test" + System.lineSeparator() + "write some words" + System.lineSeparator() + "and sentences"; 输出应为: String expected="This is a test" + System.lineSepa

我正在编写一个函数,将字符串每行的第一个字母大写。因此,以下输入:

String test="this is a test" + System.lineSeparator() +
                    "write some words" + System.lineSeparator() +
                    "and sentences";
输出应为:

String expected="This is a test" + System.lineSeparator() +
                    "Write some words" + System.lineSeparator()+
            "And sentences";
但是,当我使用Eclipse运行时。输出为:

This is a test[
Write some words]
And sentences
其字节:

54686973206973206120746573740a577269746520736f6d6520776f726473416e642073656e74656e636573
54686973206973206120746573740d0a577269746520736f6d6520776f7264730d0a416e642073656e74656e636573
Eclipse中预期的字符串为:

This is a test[
Write some words
]
And sentences
其字节:

54686973206973206120746573740a577269746520736f6d6520776f726473416e642073656e74656e636573
54686973206973206120746573740d0a577269746520736f6d6520776f7264730d0a416e642073656e74656e636573
所以两个字符串不相等。我在一个在线Java编译器中运行了一些代码,两个字符串相等

我想知道是否应该设置任何特定的系统命令来适应lineSeparator(),并使两个字符串(输出和预期)相等


谢谢,

您应该解决的问题实际上不是Eclipse。您的代码应该是独立于平台的

对于命令行/linux环境,行分隔符是一个换行符(LF),通常称为新行(NL;“\n”;“0a”)。对于Eclipse/Windows/DOS,分隔符是回车换行符(CRLF;“\r\n”;{0d','0a'})

基于您的十六进制输出,它显示Eclipse行分隔符确实是CRLF,而您构建的编辑字符串只有LF;i、 e.您所做的操作错误地将测试字符串的CRLF更改为LF

例如,您可能正在将测试字符串拆分为多个字符串,然后使用“\n”构造已编辑的字符串;e、 g.str1+“\n”+str2-或-String.format(“%s\n%s”,str1,str2)。相反,您应该使用System.LineSeparator()构建它;e、 格式(“%s%s%s”,str1,System.lineseparator(),str2)

如前所述,如果您真的希望更改Eclipse行为,我建议您查看


参考: 我们没有看到用于创建更新文本的代码。但是您可以尝试转储两个字符串的字节,以查看它们之间的差异。再看一看

例如,在Eclipse中,我看到了回车符和换行符


    false
    4162630a446566
    4162630d0a446566

你的问题不清楚,你的问题是什么?你想实现什么?欢迎来到SO。请花一分钟的时间阅读,您当前没有提供足够的信息来引出正确的解决方案。您的运行配置可能包含一个VM参数,如
line.separator=\n
(请参阅运行配置的“参数”选项卡)。谢谢您的建议。我现在已经更新了问题中的字节。您期望的字符串具有我期望的回车符(0d)和换行符(0a)。您编辑的字符串只有换行符(0a)。因此,创建已编辑字符串的方式似乎与处理线条分隔符的方式不同。您有关于如何处理编辑字符串的更多详细信息吗?是的,这就是我发现的(我的Eclipse可能会以不同的方式处理行分隔符)。我处理字符串的方法非常简单:对于测试字符串,我逐行读取。对于每行,将第一个字母大写。对不起,我不能把所有的代码都粘贴在这里,因为这是一个家庭作业。谢谢你的帮助!一些朋友建议我使用intellij,看起来它可以正确处理lineSeparator并使两个字符串相等。但是,如果可能的话,我想知道为什么Eclipse(Windows环境)可能以不同的方式处理这个操作符。谢谢如何将换行符放置到已编辑的字符串中?根据您的帖子,使用相同的System.LineSeparator()调用定义测试字符串;因此,我希望测试字符串中也包含CR/LF。因此,它归结为如何处理测试字符串以创建编辑的字符串。例如,如果使用“\n”创建编辑字符串,则只会得到LF(0a)。如果不了解如何创建编辑字符串的详细信息,就很难提供进一步的帮助。