@v_vladik

Почему я получаю эксепшн ArrayIndexOutOfBoundsException?

У меня есть такой вот образец кода. В моих планах считывать рядок из файла, в котором хранятся слова и их переводы. Англ слова сохраняются в лист "words", а их переводы - "translation". Я реализовал два геттера, но со вторым возникает проблема ArrayIndexOutOfBoundsException. В чем проблема?
public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("english.txt");
        Scanner sc = new Scanner(file);
        int size = 0;
        List<String> list = new ArrayList<>();
        List<String> words = new ArrayList<>();
        List<String> translation = new ArrayList<>();
        while (sc.hasNextLine()) {
            list.add(sc.nextLine());
            size++;
        }
        for (int i = 0; i < size; i++) {
            words.add(getFirstLine(list.get(i)));
            translation.add(getSecondLine(list.get(i)));
        }
    }
    public static String getFirstLine(String line) {
        String[] lines = line.split("-");
        return lines[0];
    }
    public static String getSecondLine(String line) {
        String[] lines = line.split("-");
        return lines[1];
    }
}
  • Вопрос задан
  • 85 просмотров
Решения вопроса 2
Очевидно, что в файле у вас есть строки, в которых нет "-", и поэтому второго элемента в массиве после split нет.
Ответ написан
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
v_vladik,
Этот вариант исключается. Я точно уверен, что в файле разделитель присутствует.

Учтите еще одно, что дефис и тире разные символы.
Например, https://www.compart.com/en/unicode/category/Pd
Что если у вас например, тире, вместо дефиса или еще что...

Не лучше ли вместо того, чтобы плодить кучу методов (получить первую строку, получить вторую, третью, четвертую и т.д. ), создать метод, который принимает строку и номер строки, которую нужно получить? Соответственно, будет один метод.
public static String getFirstLine(String line) {
        String[] lines = line.split("-");
        return lines[0];
    }
    public static String getSecondLine(String line) {
        String[] lines = line.split("-");
        return lines[1];
    }


english.txt

Было бы неплохо увидеть пример содержимого файла.

И еще вполне возможно, что у вас тут проблема:
for (int i = 0; i < size; i++) {
            words.add(getFirstLine(list.get(i)));
            translation.add(getSecondLine(list.get(i)));
        }


А чего гадать-то? Сделайте дебаг и гляньте что именно ему не нравится
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
07 мая 2024, в 18:23
20000 руб./за проект
07 мая 2024, в 18:09
2000 руб./за проект
07 мая 2024, в 17:40
300 руб./за проект