删除文本文件中的空格

时间:2018-10-15 14:34:26

标签: java file removing-whitespace

我必须编写一个简单的代码来对文本文件中的单词进行计数。然后有人告诉我,它是不完整的,因为例如,当连续有两个或多个空格时,函数会将它们视为一个单词,并且结果将是不正确的。因此,我尝试通过列出列表并删除其中的所有“”元素来修复它,但似乎不起作用。你能建议可以做什么吗?

这是现在的代码:

    int count = 0;
    File file = new File("C:\\Users\\user\\Desktop\\Test.txt");
    FileInputStream fis = new FileInputStream(file);
    byte[] bytesArray = new byte[(int) file.length()];
    fis.read(bytesArray);
    String s = new String(bytesArray);
    String[] data = s.split(" ");
    List<String> list = new ArrayList<>(Arrays.asList(data));
    list.remove(" ");
    data = list.toArray(new String[0]);
    for (int i = 0; i < data.length; i++) {
        count++;
    }
    System.out.println("Number of words in the file are " + count);

4 个答案:

答案 0 :(得分:3)

您可以通过正则表达式来实现

String [] data = s.split(“ \ s +”);

        int count = 0;
        File file = new File("/home/vahid/Documents/test.txt");
        FileInputStream fis = new FileInputStream(file);
        byte[] bytesArray = new byte[(int) file.length()];
        fis.read(bytesArray);
        String s = new String(bytesArray);
        String[] data = s.split("\\s+");
        List<String> list = new ArrayList<>(Arrays.asList(data));
        list.remove(" ");
        data = list.toArray(new String[0]);
        for (int i = 0; i < data.length; i++) {
            count++;
        }
        System.out.println("Number of words in the file are " + count);

答案 1 :(得分:1)

成为一个书呆子。您可以使用java.nio.file包中的类仅一行完成操作:)

int count = new String(Files.readAllBytes(Paths.get("/tmp/test.txt")), "UTF-8")
           .trim().split("\\s+").length;

计算文件中有多少个单词。或者

String result = new String(Files.readAllBytes(Paths.get("/tmp/test.txt")), "UTF-8")
           .trim().replaceAll("\\s+", " ");

使用单个字符串正确替换内容。

答案 2 :(得分:0)

尝试以下代码行:

String data1 = s.trim().replaceAll(" +", " ");

在行之前:

String[] data = data1.split(" ");

这应该删除String中2个或更多连续空格的任何出现。无需使用list.remove(" ")

答案 3 :(得分:0)

处理此类要求的最佳方法: 首先,我们应该知道文本文件中使用的字符编码。 基于这一点,我们应该尝试逐字节读取文件,并同时进行处理 例如:如果您在读取第一个字节时文件是utf-8,则当我们找到“。”时,我们可以识别要读取更多字节以获得第一个字符。或“”或换行符,那么我们可以将其识别为单词分隔符。

这种方式非常有效(特别是对于大文件),并且始终会影响文件编码。

如果我们用byte []调用String构造函数,它将始终使用默认编码,并且还会逐字节迭代数组。