Зачем вам нужны петли for
и for each
?
Вы хотите разбить строку на слова и поместить эти слова в массив singleMarkArray
, верно?
Вы можете сделать это так:
String line = bufRdr.readLine();
if (line != null && !line.equalsIgnoreCase("")) {
singleMarkArray = line.split("\\s+");
// the above line checks for multiple spaces
System.out.println(Arrays.toString(singleMarkArray));
}
Так что вам не нужно беспокоиться о том, что размер singleMarkArray
не равен количеству слов.
Также ваша логика неверна.
Вы используете переменную s
в качестве счетчика цикла for
и увеличиваете ее внутри цикла for each
, поэтому ее значение равно undefined , поскольку вы не знаете количество слов.
Что касается java.lang.nullPointerException
, которое вы получаете, это происходит, когда больше нет строк для чтения, так что это:
line = bufRdr.readLine();
назначит null
на line
.
Вот почему вам всегда нужно проверять после readLine()
:
if (line != null...) {...}