Ошибка индекса вне диапазона с исключением в основном потоке
Я начинающий учиться программировать на Java. Я написал программу, которая читает слова из файла и печатает их с пробелами в дополнение к тому, как они существуют в файле. Когда я запускаю свою программу, я получаю сообщение об ошибке "исключение в основном потоке".
Любая помощь будет оценена!
Благодарю вас!
Файл, из которого я читаю:
APPLE
ELABORATE
FUTURE
PROOF
LOGICAL
Моя программа:
//imports
import java.awt.*;
import java.util.*;
import java.io.*;
class Untitled {
public static void main(String[] args) throws IOException {
//variables
String filePath = "/Users/cameronburgess/Programming/I:O/words.txt";
String word = "";
int cv = 0;
String spacedWord = "";
//objects
BufferedReader readBot = new BufferedReader(new FileReader (filePath));
//user facing
System.out.println("This program will read from a File at :" + filePath);
System.out.println();
while (readBot.readLine() != null) {
word = readBot.readLine();
//spliter
while (word.length() != cv) {
spacedWord = spacedWord + " " + word.charAt(cv);
cv = cv + 1;
}
System.out.println(word + " OR " + spacedWord);
}
}
}
Консоль Вернуться:
This program will read from a File at :/Users/cameronburgess/Programming/I:O/words.txt
ELABORATE OR E L A B O R A T E
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9
at java.lang.String.charAt(String.java:686)
at Untitled.main(Strings6.java:36)
3 ответа
Решение
Попробуйте внести изменения в цикл while,
Вам нужно сбросить значение до cv =0; spacedWord="";
когда вы пытаетесь разделить слово.
лайк,
while ((word=readBot.readLine()) != null) {
//spliter
cv =0;
spacedWord="";
while ( cv <word.length()) {
spacedWord = spacedWord + " " + word.charAt(cv);
cv = cv + 1;
}
System.out.println(word + " OR " + spacedWord);
}
Вы получите результат следующим образом:
This program will read from a File at :TEST.txt
APPLE OR A P P L E
ELABORATE OR E L A B O R A T E
FUTURE OR F U T U R E
PROOF OR P R O O F
LOGICAL OR L O G I C A L
Вы должны повторно инициализировать свой счетчик cv в 0 каждый раз, когда читаете свою строку:
word = readBot.readLine();
// Add this:
cv = 0
while (word.length() != cv) {
spacedWord = spacedWord + " " + word.charAt(cv);
cv = cv + 1;
}
System.out.println(word + " OR " + spacedWord);
Если вы не хотите обрабатывать длину слова в конце, используйте цикл foreach с массивом символов следующим образом
char[] charactersArray = word.toCharArray();
for (char character : charactersArray) {
//do whatever you want to with the 'character'
}