为什么我的单词有时会被一个人拒绝?

时间:2016-05-17 05:04:29

标签: java string file bufferedreader filereader

大部分时间它都能正常工作。很少一个人算错。有什么猜测吗?

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

2 个答案:

答案 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

这更麻烦。

我希望它有所帮助。