如何在比较两个文件时忽略空格?

12

我想创建一个单元测试方法。Java版本为1.6。

@Test
public void TestCreateHtml() throws IOException{

    final File output = parser.createHtml();
    final File expected = new File("src/main/resources/head.jsp");

  assertEquals("The files differ!", FileUtils.readLines(expected), FileUtils.readLines(output));
}

这个测试方法不起作用。两个文件的内容相同,但它们有不同数量的空格。

我该如何忽略空格?


什么样的空格?是字符串前端或末尾的空格,还是单词之间的空格? - Jeroen Vannevel
字符串前面和后面 - Dan
使用String的“trim”方法。这将删除前导和尾随空格。 - DrunkenPope
将它们替换为空怎么样? - Thomas Weller
为什么你没有在“expected”文件中放入正确的值? - talex
4个回答

11

如果问题出现在前导/尾随空格中:

assertEquals(actual.trim(), expected.trim());

如果问题出现在文件内容中,我所能想到的唯一解决方法就是从两个输入中删除所有的空格:

assertEquals(removeWhiteSpaces(actual), removeWhiteSpaces(expected));

removeWhiteSpaces() 方法看起来像这样:

String removeWhiteSpaces(String input) {
    return input.replaceAll("\\s+", "");
}

1

如果问题只是前导/尾随空格,您可以在修剪后逐行进行比较。如果一个文件中可能会比另一个文件多出额外的换行符,则此方法不适用。

@Test
public void TestCreateHtml() throws IOException{
    final File output = parser.createHtml();
    final File expected = new File("src/main/resources/head.jsp");

    List<String> a = FileUtils.readLines(expected);
    List<String> b = FileUtils.readLines(output);

    assertEquals("The files differ!", a.size(), b.size());
    for(int i = 0; i < a.size(); ++i)
        assertEquals("The files differ!", a.get(i).trim(), b.get(i).trim());
}

1
遍历列表并修剪每一行。
List<String> result = new ArrayList<String>();
for(String s: FileUtils.readLines(expected)) {
    result.add(s.trim());
}

同其他文件一样。
然后比较新列表。

0
只需在比较之前删除开头和结尾的空白字符即可:
@Test
public void TestCreateHtml() throws IOException{

    final File output = parser.createHtml();
    final File expected = new File("src/main/resources/head.jsp");

    assertEquals("The files differ!", FileUtils.readLines(expected).replaceAll("^\\s+|\\s+$", ""), FileUtils.readLines(output).replaceAll("^\\s+|\\s+$", ""));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接