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

时间:2015-04-27 13:12:27

标签: java file unit-testing compare

我想创建一个单元测试方法。 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));
}

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

如何忽略空格?

4 个答案:

答案 0 :(得分:7)

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

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

如果文件内容存在问题,我只能想到的解决办法是从两个输入中删除所有空格:

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

其中removeWhiteSpaces()方法如下所示:

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

答案 1 :(得分: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());
}

答案 2 :(得分:1)

迭代列表并修剪每一行

List<String> result = new ArrayList<String>();
for(String s: FileUtils.readLines(expected)) {
    result.add(s.trim());
}

与其他文件相同。

然后比较新列表。

答案 3 :(得分: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+$", ""));
}