Java 使用分隔符将字符串数组转换为int

Java 使用分隔符将字符串数组转换为int,java,regex,Java,Regex,我不明白为什么会出现空指针异常。我正在尝试转换用户在提示后输入的行号,我想将其删除为空格“,”或逗号和空格“,” 这是我的代码,我在nums[I]=Integer.parseInt(holder[I])上得到一个空指针异常;线路。我就是不明白为什么 String again="n"; int[] nums = null; do { Scanner scan = new Scanner (System.in); System.out.printl

我不明白为什么会出现空指针异常。我正在尝试转换用户在提示后输入的行号,我想将其删除为空格“,”或逗号和空格“,”

这是我的代码,我在nums[I]=Integer.parseInt(holder[I])上得到一个空指针异常;线路。我就是不明白为什么

String again="n";
    int[] nums = null;

    do {
        Scanner scan = new Scanner (System.in);

        System.out.println("Enter a sequence of integers separated by a combination of commas or spaces: ");
        String in=scan.nextLine();
        String[] holder=in.split(",| |, ");

            for (int i=0; i<holder.length; i++) {

                nums[i]=Integer.parseInt(holder[i]);
                System.out.print(nums[i]);
            }


    }
    while (again=="y");
不过,我还有第二个问题,因为我的正则表达式似乎失败了,如果用“,”或“,”来描述,我可以让它读出来,但不能用“,”来描述,有什么想法吗

这是我的错误:

Enter a sequence of integers separated by a combination of commas or spaces: 
    1, 2, 3
    Exception in thread "main" 1java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at SortComparison.main(SortComparison.java:20)

在将其解析为整数之前,最好先打印
holder[i]
,以查看其中的内容。
我猜,
holder[I]
没有整数的有效值。

您的空指针异常是由于您已将nums数组初始化为空,然后尝试在for循环中“指向”它。您可以丢失
int[]nums=null
并添加:

int[] nums = new int[holder.length];
就在for循环之前(显然,在创建holder数组之后)。

您已经设置了

int[] nums = null;
然后尝试访问

num[i]
这就产生了NullPointerException。首先需要构造数组以容纳所需数量的元素:

int[] nums = new int[holder.length] 

您还没有提到数组的大小?您认为如果我使用一个列表来代替它,它是否可以工作而不必声明大小?是的,列表可以工作,但您仍然需要初始化它:
list nums=new list()
不过,出于这个目的,数组也可以工作,因为您知道大小(它是字符串数组的长度)。@drewmore我认为它是整数,因为它不接受前置式type@Pragnani绝对正确。但这会导致NullPointerException吗?我不确定,但是我可以肯定地看到,
I
小于
length
,他声称抛出异常的行在那里。因此,它可能会导致异常;但不是
NullPointerException
。我之所以这样做,是因为它是一个简单的程序,而且比列表更容易管理。事实上,它确实是。不过,总的来说,列表非常有用。我现在使用它们的次数比使用数组的次数多很多。我可能会改变它,我不经常使用它们,但我最终会将其放入排序中,可能更容易处理较大的输入,但你也可以相当容易地对数组进行排序。当您不知道列表需要多大时,列表主要会变得有用。只要这段代码基本保持不变(即,只要您的数组总是来自一行用户输入),数组就很适合您,因为您总是知道数组需要多大。
int[] nums = new int[holder.length]