-1

我正在尝试逐行读取文本文件并将这些行连接起来以创建单个字符串。但是在创建统一字符串时,0A会在每行之后添加。字符串本身只有一行,我0A在普通文本/Java 编辑器中看不到,但是当我在十六进制编辑器中打开它时,我可以在每一行之后看到“0A”。我正在使用 Linux (Ubuntu) 平台。

我已经尝试了所有可能的方法来删除它们,特别是Java 如何从字符串中删除回车符(HEX 0A)?

但我无法删除它们。关于如何做到这一点的任何想法?

更新:

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)
4

3 回答 3

2

expected变量的类型是 ,而变量的String类型actualStringBuilder。在...的意义上,这些对象永远不会相等

Assert.assertEquals(expected, actual);

,因为它们有不同的类型。

于 2013-01-17T20:02:22.370 回答
1

在断言中,您是否需要使用 actual.toString ,因为它是一个字符串生成器?

为了接受答案,从评论中添加了这个。

@oheyder 也偶然发现了这一点。给他+1。

于 2013-01-17T20:27:14.583 回答
1

'0A' 是换行符(“\n”)。您只是删除回车符 ("\r") (0D)。尝试以与替换“\r”相同的方式替换“\n”。正如有人评论的那样, readline() 调用应该解决这个问题。

在 Windows 中,行以 \r\n 结尾在 *nix 行中,仅以 \n 结尾

换行

于 2013-01-17T18:31:17.477 回答