大多数情况下,它可以正常工作。它很少计数一次。有猜到吗?

public static int countWords(File file) throws FileNotFoundException, IOException{
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        List<String> strList = new ArrayList<>();

        while ((line=br.readLine())!=null){
            String[] strArray= line.split("\\s+");
            for (int i=0; i<strArray.length;i++){
                strList.add(strArray[i]);
            }
        }
        return strList.size();

    }


特别是在下面的示例中,它给出的是3而不是2:

\n
             k

最佳答案

如果您使用的是Java 8,则可以使用Streams并过滤您认为是“单词”的内容。例如:

    List<String> l = Files.lines(Paths.get("files/input.txt")) // Read all lines of your input text
            .flatMap(s->Stream.of(s.split("\\s+"))) // Split each line by white spaces
            .filter(s->s.matches("\\w")) // Keep only the "words" (you can change here as you want)
            .collect(Collectors.toList()); // Put the stream in a List


在这种情况下,它将输出[k]

当然,您可以通过修改代码并将此条件添加到for循环中来在Java 7中执行相同的操作:

if(strArray[i].matches("\\w"))
    strList.add(strArray[i]); // Keep only the "words" - again, use your own criteria


只是比较麻烦。

希望对您有所帮助。

09-10 09:51
查看更多