2013-01-17 111 views
-1

我正在尝试读取文本文件,逐行并连接行以创建单个字符串。但在创建统一字符串时,每行后面都会添加0A。字符串本身只是一行,我在正常的文本/ Java编辑器中看不到0A,但是当我在十六进制编辑器中打开它时,每行后面都可以看到'0A'。我正在开发一个Linux(Ubuntu)平台。如何从字符串中删除'0A'?

我曾尝试一切可能的事情删除它们,特别是Java How to remove carriage return (HEX 0A) from String?

但我不能将其删除。有关如何做到这一点的任何想法?

UPDATE:

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) 
+2

在另一个问题的食谱应该工作。如果没有,请提供一个小的可运行的测试用例,说明哪些方法不适合您以及以何种方式工作。 – NPE

+1

如果您使用'BufferedReader.readLine()',它们将被删除。你如何阅读文件? –

+0

@PeterLawrey:只能用'BufferedReader.readLine()'读取它。 – Bhushan

回答

1

在声明中,你是否需要使用actual.toString,因为它是一个stringbuilder?

在评论中添加了此内容以接受答案。

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

+0

upvote并接受。 – Bhushan

1

的 '0A' 是换行符( “\ n”)。 您只能删除回车符(“\ r”)(0D)。 尝试替换“\ n”以及以与替换“\ r”相同的方式。 有人评论说,尽管readline()调用应该照顾。

在Windows中,线与两个端\ r \ n 在* nix的线连接仅与\ n

参见newline

2

的类型expected变量是Stringactual变量的类型是StringBuilder。这些物体在...的范围内永远不会相等。...

Assert.assertEquals(expected, actual); 

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