大多数情况下,它可以正常工作。它很少计数一次。有猜到吗?
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
只是比较麻烦。
希望对您有所帮助。