在Java中使用字符串拆分时更改数组大小

时间:2019-05-08 01:31:55

标签: java arrays split hashmap

分配:获取两个字符串,以逗号分隔。保存到哈希图中。

目标:使用单个try-catch块来防止用户输入错误数量的字符串。

问题:如果仅提供一个字符串, register.put 行将抛出“ IndexOutOfBounds”,但是如果我提供3个以上的字符串,则好像数组的大小在增加以处理其他订单项(根据IntelliJ IDEA中的调试器)。这是 nextLine()。split 函数的预期功能,还是我遗漏了一些明显的东西?我知道我可以使用另一个循环来更正此问题,但是我很困惑“收集器”如何处理以下输入:

你好,世界,不是,它,A,伟大,白天?

    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 个答案:

答案 0 :(得分:1)

尝试处理错误的输入,而不是捕获异常。

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!");
}

答案 1 :(得分:0)

如果只愿意使用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.");
    }
}
}

将此作为参考,您可以根据需要更改自定义例外。只是试图展示如何做到这一点。