Изменение размера массива при использовании String Split в Java - PullRequest
1 голос
/ 08 мая 2019

Задание: получить две строки, разделенные запятой.Сохранить в хэш-карту.

Цель: использовать один блок try-catch, чтобы пользователь не мог ввести неправильное количество строк.

Проблема: register.put *Строка 1006 * выдаст «IndexOutOfBounds», если указана только одна строка, но если я предоставлю 3+ строки, похоже, что размер моего массива увеличивается для обработки дополнительных позиций (согласно отладчику в IntelliJ IDEA).Это предназначенная функция функции nextLine (). Split или я упускаю что-то очевидное?Я понимаю, что могу использовать другой цикл, чтобы исправить это, но я озадачен тем, как «сборщик» может обрабатывать следующий ввод:

Привет, Мир, Не правда ли, А, Великий, День?

    HashMap <String, String> register = new HashMap();
    Scanner in = new Scanner(System.in);
    String[] collector = new String[2];


        try {
            collector = in.nextLine().split(",");
            register.put(collector[0], collector[1]);
        }catch (IndexOutOfBoundsException e){
            System.out.println("\nYou didn't use the correct format!");
            System.out.println("Please use the format provided!");
        }

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Попробуйте обработать неправильные входные данные вместо перехвата исключения.

HashMap <String, String> register = new HashMap();
Scanner in = new Scanner(System.in);


String[] collector = in.nextLine().split(",");

// validate inputs here
if (collector.length == 2 ) {
    register.put(collector[0], collector[1]);
} else {
    System.out.println("\nYou didn't use the correct format!");
    System.out.println("Please use the format provided!");
}
0 голосов
/ 08 мая 2019

Если вы хотите использовать только try-catch, вы можете использовать пользовательские исключения для обработки входных данных.

Если это так, вы можете попробовать как

public class Test1 {
public static void main(String[] args) {
    HashMap<String, String> register = new HashMap();
    Scanner in = new Scanner(System.in);
    String[] collector;
    try {
        collector = in.nextLine().split(",");
        if (collector.length > 2) {
            throw new Test1().new MaxLimitCrossed();
        } else if (collector.length < 2) {
            throw new Test1().new MinLimitCrossed();
        }
        register.put(collector[0], collector[1]);
        System.out.println(register.toString());
    } catch (MinLimitCrossed e) {
        System.out.println(e.getMessage());
    } catch (MaxLimitCrossed e) {
        System.out.println(e.getMessage());
    }
}

class MaxLimitCrossed extends Exception {
    public MaxLimitCrossed() {
        super("Max Limit Crossed.");
    }
}

class MinLimitCrossed extends Exception {
    public MinLimitCrossed() {
        super("Min Limit Crossed.");
    }
}
}

Рассмотрите это как ссылку,Вы можете изменить пользовательские исключения в соответствии с вашими требованиями.Просто попытался продемонстрировать, как вы можете это сделать.

...