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

在Java中使用字符串拆分时更改数组大小,java,arrays,split,hashmap,Java,Arrays,Split,Hashmap,赋值:获取两个字符串,用逗号分隔。保存到hashmap 目标是:使用一个try-catch块来防止用户输入错误数量的字符串 问题是:如果只提供了一个字符串,register.put行将抛出“IndexOutOfBounds”,但如果我提供了3个以上的字符串,则数组的大小似乎在增加以处理额外的行项(根据IntelliJ IDEA中的调试器)。这是nextLine()的预期函数。拆分函数,还是我遗漏了一些明显的内容?我知道我可以使用另一个循环来纠正这一点,但我对“收集器”如何处理以下输入感到困惑:

赋值:获取两个字符串,用逗号分隔。保存到hashmap

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

问题是:如果只提供了一个字符串,register.put行将抛出“IndexOutOfBounds”,但如果我提供了3个以上的字符串,则数组的大小似乎在增加以处理额外的行项(根据IntelliJ IDEA中的调试器)。这是nextLine()的预期函数。拆分函数,还是我遗漏了一些明显的内容?我知道我可以使用另一个循环来纠正这一点,但我对“收集器”如何处理以下输入感到困惑:

你好,世界,今天不是很好吗

    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!");
        }
HashMap register=newhashmap();
扫描仪输入=新扫描仪(系统输入);
字符串[]收集器=新字符串[2];
试一试{
收集器=in.nextLine().split(“,”);
register.put(收集器[0],收集器[1]);
}catch(IndexOutOfBoundsException e){
System.out.println(“\n您没有使用正确的格式!”);
System.out.println(“请使用提供的格式!”);
}

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

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!");
}
HashMap register=newhashmap();
扫描仪输入=新扫描仪(系统输入);
String[]collector=in.nextLine().split(“,”);
//在此处验证输入
if(collector.length==2){
register.put(收集器[0],收集器[1]);
}否则{
System.out.println(“\n您没有使用正确的格式!”);
System.out.println(“请使用提供的格式!”);
}

如果您愿意只使用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.");
    }
}
}
公共类Test1{
公共静态void main(字符串[]args){
HashMap寄存器=新HashMap();
扫描仪输入=新扫描仪(系统输入);
字符串[]收集器;
试一试{
收集器=in.nextLine().split(“,”);
如果(收集器长度>2){
抛出新的Test1();
}否则如果(收集器长度<2){
抛出新的Test1();
}
register.put(收集器[0],收集器[1]);
System.out.println(register.toString());
}渔获物(Mine){
System.out.println(e.getMessage());
}捕获(最大值){
System.out.println(e.getMessage());
}
}
类MaxLimitException{
公共MaxLimit(){
超级(“超过最大限制”);
}
}
类MinLimitException扩展异常{
公营机构{
超级(“越过最小限制”);
}
}
}

作为参考,您可以根据需要更改自定义异常。只是尝试展示如何做到这一点。

阵列对象的大小没有改变。而是在调用.nextLine().split(“,”)中的
collector=in时,为收集器变量分配了一个新数组。上一个2项空数组被丢弃和浪费。split()方法返回字符串[]。因此,最初大小为2的收集器[]数组将被重新分配split方法返回的字符串[]。出现异常的原因可能是发生异常时您正在读取的行与您认为的不同。调试它——找出到底是哪一行。