大部分时间它都能正常工作。很少一个人算错。有什么猜测吗?
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
答案 0 :(得分:2)
我猜第二行被分成两个字符串,&#34;&#34;和&#34; k&#34;。请参阅以下代码:
import java.util.Arrays;
public static void main(String[] args) {
String str = " k";
String[] array = str.split("\\\s+");
System.out.println("length of array is " + array.length); // length is 2
System.out.println(Arrays.toString(array)); //array is [, k]
}
答案 1 :(得分:1)
如果您使用 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
这更麻烦。
我希望它有所帮助。