删除文本文件中的空格

Removing whitespaces in text file

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

这是现在的代码:

    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);

试试这行代码:

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

行前:

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

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

你可以通过正则表达式实现这个

字符串[] 数据= 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);

处理此类需求的最佳方式: 首先我们应该知道文本文件中使用的字符编码。 基于此,我们应该尝试逐字节读取文件,同时进行处理 例如:如果当您读取第一个字节时文件是 utf-8,我们可以确定应该读取多少字节才能得到第一个 character.like,当我们找到一个“.”时。或 " " 或 line break ,那么我们可以将其识别为单词分隔符。

这种方式很有效(特别是对于大文件)并且文件编码很重要。

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

做个书呆子。你可以在一行中完成,使用 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+", " ");

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