разделить массив («пробел») и посчитать количество слов - PullRequest
0 голосов
/ 02 июля 2019

, поэтому я хочу посчитать количество слов в моем 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 голосов
/ 02 июля 2019

Метод addAll() ожидает список, но split() возвращает массив.
Вы должны использовать Arrays.asList() для преобразования массива в список.
Также вы должны разделить на несколько пробелов.
Изменить на это:

moreElements.addAll(Arrays.asList(e.split("\\s+")));
0 голосов
/ 02 июля 2019

Если вы используете 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;
}
0 голосов
/ 02 июля 2019

Это потому, что есть несколько пробелов,

попробуйте использовать что-то вроде:

String e = elements.get(i);
moreElements.addAll(Arrays.asList(e.split("\\s+")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...