Пара наблюдений.
- вы получаете ошибку, потому что ваш массив недостаточно велик
и индекс j
превышает его размер. - вы сохраняете перезапись токенов в
while loop
. В то время как l oop необходимо включить копирование токенов в массив фраз.
Поэтому попробуйте следующее:
while((line = br.readLine()) != null) {
tokens = line.split("[ ]");
n += tokens.length; // don't really need this.
//starting offset to write into phrase
int len = phrase.length;
phrase = Arrays.copyOf(phrase,phrase.length + tokens.length);
for(int j = 0; j<tokens.length; j++) {
phrase[j + len] = tokens[j];
}
}
Это утверждение
phrase = Arrays.copyOf(phrase,phrase.length + tokens.length)
Копирует содержимое фразы и увеличивает размер массива для обработки записи токенов.
Другая (и, вероятно, предпочтительная) альтернатива - использовать List<String>
, который увеличивается по мере необходимости.
List<String> phrase = new ArrayList<>();
for(int j = 0; j<tokens.length; j++) {
phrase.add(tokens[j]);
}
// or skip the loop and just do
Collections.addAll(phrase,tokens);
Одно наблюдение. Я не знаю, на что вы делитесь, но ваше заявление о расколе выглядит подозрительно.