我正在尝试逐行读取文本文件并连接这些行以创建单个字符串。但是在创建统一字符串时,每行之后都会添加0A
。字符串本身只有一行,我在普通文本/ Java编辑器中看不到0A
,但是当我在Hex编辑器中打开它时,我可以在每行之后看到'0A'。我正在开发Linux(Ubuntu)平台。
我已尽力删除它们,特别是Java How to remove carriage return (HEX 0A) from String?
但我无法删除它们。有关如何做到这一点的任何想法?
更新
File workingFolderLocal = new File("src/test/resources/testdata");
String expected = "String1";
MyClass myClass = new MyClass();
myClass.createPopFile(workingFolderLocal);
// Read the created file and compare with expected output
FileInputStream fin = new FileInputStream(workingFolderLocal + "/output.xyz");
BufferedReader myInput = new BufferedReader(new InputStreamReader(fin));
StringBuilder actual = new StringBuilder("");
String temp = "";
while ((temp = myInput.readLine()) != null) {
String newTemp = temp.replaceAll("\r", "");
actual.append(newTemp);
}
System.out.println("actual: " + actual.toString());
myInput.close();
Assert.assertEquals(expected, actual);
以下是我得到的输出/错误:
actual: String1
FAILED: testCreatPopFile
junit.framework.AssertionFailedError: expected:<String1> but was:<String1>
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.failNotEquals(Assert.java:277)
at junit.framework.Assert.assertEquals(Assert.java:64)
at junit.framework.Assert.assertEquals(Assert.java:71)
答案 0 :(得分:2)
expected
变量的类型为String
,而actual
变量的类型为StringBuilder
。这些物体永远不会相等......
Assert.assertEquals(expected, actual);
,因为它们有不同的类型。
答案 1 :(得分:1)
'0A'是换行符(“\ n”)。 您只是删除回车符(“\ r”)(0D)。 尝试替换“\ n”,就像更换“\ r”一样。 正如有人评论的那样,readline()调用应该照顾它。
在Windows中,行以\ r \ n结尾 在* nix行中仅使用\ n
请参阅newline
答案 2 :(得分:1)
在断言中,你需要使用actual.toString,因为它是一个字符串构建器吗?
从评论中添加此内容以接受答案。
@oheyy也偶然发现了这一点。给了他一个+1。