如何从字符串中删除'0A'?

时间:2013-01-17 17:39:46

标签: java special-characters

我正在尝试逐行读取文本文件并连接这些行以创建单个字符串。但是在创建统一字符串时,每行之后都会添加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)

3 个答案:

答案 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。