@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];
    }
}
  • Вопрос задан
  • 83 просмотра
Решения вопроса 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)));
        }


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

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

Войти через центр авторизации
Похожие вопросы
26 мая 2022, в 10:41
2000 руб./в час
26 мая 2022, в 10:22
3900 руб./за проект
26 мая 2022, в 09:53
3990 руб./за проект