为什么这些字符串不相等?

时间:2017-06-16 15:55:28

标签: java

我正在从文件中读取一个字符串,并将其与我知道在文件中的内容进行比较

以下是相关代码

Test.java

@Test
    public void testReadFile() throws IOException {
        String expectedFileContent = "##########\n#A...#...#\n#.#.##.#.#\n#.#.##.#.#\n#.#....#B#\n#.#.##.#.#\n#....#...#\n##########";
        System.out.println(expectedFileContent);
        String readFile = readFile("test/maze1.txt", Charset.defaultCharset());
        System.out.println(readFile);
        System.out.println(expectedFileContent.equalsIgnoreCase(readFile));
        assertEquals(readFile, expectedFileContent);
    }

readFile.Java

static String readFile(String path, Charset encoding)
            throws IOException
    {
        byte[] encoded = Files.readAllBytes(Paths.get(path));
        return new String(encoded, encoding);
    }

mae1.txt

##########
#A...#...#
#.#.##.#.#
#.#.##.#.#
#.#....#B#
#.#.##.#.#
#....#...#
##########

当我运行测试时测试失败但是当我在视觉上比较字符串时它们是相同的。

有没有办法让这个测试通过?

5 个答案:

答案 0 :(得分:0)

如果使用Windows,默认情况下没有相同的结束行(\ r \ n),因此您必须排列字符串或转换文件。

答案 1 :(得分:0)

也许在你阅读文件后,你在字符串的末尾有空格,用yourStringFromFile.trim()方法删除它们,一切都将完成。

答案 2 :(得分:0)

您正在阅读的文件可能与Windows一样(\ r \ n),请尝试使用此

String readFile = readFile("test/maze1.txt", Charset.defaultCharset());
readFile = readFile.replaceAll("(\r\n|\n)", "\n");

这将根据您的字符串

规范化文件

答案 3 :(得分:0)

我在调用length()方法时尝试了你的代码,你的expectedContentFile有 87 个字符,但你的文件中的字符串是 88 ,然后我调用 trim( 来自文件的字符串,然后两者相等。

import java.nio.file。; import java.nio.charset。; import java.io.IOException;

public class ReadFile{
    public static void main(String[]args) throws IOException{
        String expectedFileContent = "##########\n#A...#...#\n#.#.##.#.#\n#.#.##.#.#\n#.#....#B#\n#.#.##.#.#\n#....#...#\n##########";

        System.out.println(expectedFileContent);
        System.out.println(expectedFileContent.length());

        String x = readFile("file.txt", Charset.defaultCharset());
        System.out.println(x.length());
        if(expectedFileContent.equals(x.trim())){
            System.out.println("equal");
        }else{
            System.out.println("not equal");
        }
}
    static String readFile(String path, Charset encoding) throws IOException{
        byte[] encoded = Files.readAllBytes(Paths.get(path));
        return new String(encoded, encoding);
    }
}

Eidt(调试):

static String readFile(String path, Charset encoding) throws IOException{
    byte[] encoded = Files.readAllBytes(Paths.get(path));
    String x =  new String(encoded, encoding);
    int count = 0;
    for(char ch: x.toCharArray()){
        System.out.println(ch + " " + ++count );
    }
    return x;
}

输出(只发布最后10个字符,格式为character counter)为:

# 78
# 79
# 80
# 81
# 82
# 83
# 84
# 85
# 86
# 87

 88

你可以看到最后还有一个角色,这是额外的

答案 4 :(得分:0)

“\ r \ n”默认情况下会附加到文件内容中。您可以使用Files.readAllLines并通过\ n连接所有字符串。这是代码:

static String readFile(String path) throws IOException
    {
        List<String> strings = Files.readAllLines(Paths.get(path));
        return String.join("\n",strings);
    }