Java 使用分隔符将字符串数组转换为int
我不明白为什么会出现空指针异常。我正在尝试转换用户在提示后输入的行号,我想将其删除为空格“,”或逗号和空格“,” 这是我的代码,我在nums[I]=Integer.parseInt(holder[I])上得到一个空指针异常;线路。我就是不明白为什么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
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]