arraylist split(“ whitespace”)并计算单词数

时间:2019-07-02 17:46:53

标签: java

所以我想计算ArrayList中的单词数,当前我从文件中读取行并将这些行保存到ArrayList
该文件具有

word    definition
a       alpha
b       bravo
c       charlie
d       delta
e       echo
f       foxtrot

所以当我执行arraylist.size()时,它会显示7。但是我想计算单词的数量。

我的代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class WarmUp {
    public static void main(String[] args) {
        BufferedReader br = null;
        String line = null;
        ArrayList<String> elements = new ArrayList<String>();

        try {
            br = new BufferedReader(new FileReader("src/dictionary.txt"));
            while((line=br.readLine()) != null) {
                elements.add(line);
            }
        }
        catch(IOException e) {
            e.printStackTrace();
        }       
    }
}

我认为我可以使用拆分方法 所以我认为这是方法

ArrayList<String> moreElements = new ArrayList<String>();

for(int i=0; i < elements.size(); i++) {
    String e = elements.get(i);
    moreElements.addAll(e.split(" "));

}

然后致电moreElements.size() 但我做错了事...

3 个答案:

答案 0 :(得分:0)

那是因为有多个空格

尝试使用类似的内容:

String e = elements.get(i);
moreElements.addAll(Arrays.asList(e.split("\\s+")));

答案 1 :(得分:0)

方法addAll()需要一个列表,但是split()返回一个数组。
您必须使用Arrays.asList()将数组转换为列表。
另外,您必须用多个空格分开。
更改为此:

moreElements.addAll(Arrays.asList(e.split("\\s+")));

答案 2 :(得分:0)

如果您使用Java 8或更高版本,则可以使用(假设您的列表称为elements):

int count = elements.stream().mapToInt(x -> x.split("\\s+").length).sum();

带循环的解决方案:

int count = 0;
for(String line : elements) {
  String[] tmp = line.split("\\s+"); //split on one or more spaces
  count += tmp.length;
}