如何将字符串数组转换为Ints数组



我是Java编程的新手,但在浏览了这个网站后,我相当确定这应该可行。

public static int[] ArrayStringToArrayInt(String[] arrayString) {
int[] arrayInt = new int[arrayString.length]; //Array of Ints for output
for (int i = 0; i <= arrayString.length; i++ ) {  //Run through the 
arrayInt[i] = Integer.parseInt(arrayString[i]);   //array, Parsing each
}                                                 //item into an int
return arrayInt;
}

我想要这个方法做的是获取一个输入数组:["1","2","3"],每个项都是一个字符串并返回[1,2,3],其中每个项目都是一个整数

我用这个代码调用方法

int[] toBeSorted = ArrayStringToArrayInt(inputStringArray);

在这种情况下,toBeSorted在这里被声明,同时被初始化。

每当我尝试运行这个时,我都会得到以下错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at sorter.Sorter.ArrayStringToArrayInt(Sorter.java:31)
at sorter.Sorter.main(Sorter.java:22)   
Java Result: 1

第31行是我的For循环的主体,它是进行解析的部分,第22行是调用该方法的地方。

我需要这个的原因是,我试图使用Scanner类从用户那里获得输入,并希望他们能够同时输入许多数字。然后,我使用分隔符模式将输入转换为数组。虽然这看起来很好,但我只能弄清楚如何使输入成为字符串数组,而不是int,这是我的问题。

所以我想我要问的是1) 为什么我的代码不起作用?和2) 有没有比这更容易的方法从用户那里获取输入并将其转换为int数组?

对于那些想看到我的整个代码的人,这里是

中间的测试变量和两个数字的相加只是我测试代码的一种方式,看看它是否有效。它应该显示将您输入的列表中的前两个数字相加的结果

package sorter;
import java.util.Scanner;
import java.util.Arrays;
public class Sorter {
public static void main(String[] args) {
Scanner userInput = new Scanner( System.in );
System.out.println("Enter a list to be sorted, seperate numbers by commas:");
String input = userInput.nextLine(); //Gets aan input as a String
String delims = "[,]+"; //Use Comma as Delimiter
String[] inputStringArray = input.split(delims); //Parse String and creates
//an array
System.out.println(Arrays.toString(inputStringArray)); //Outputs a string of
//the given array
int[] toBeSorted = ArrayStringToArrayInt(inputStringArray);
int test = toBeSorted[0] + toBeSorted[1];
System.out.println(test);
}
public static int[] ArrayStringToArrayInt(String[] arrayString) {
int[] arrayInt = new int[arrayString.length]; //Array of Ints for output
for (int i = 0; i <= arrayString.length; i++ ) {  //Run through the 
arrayInt[i] = Integer.parseInt(arrayString[i]);   //array, Parsing each
}                                                 //item into an int
return arrayInt;
} 
}

循环的范围错误:

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

应该是

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

数组的有效索引介于0和arrayString.length - 1之间。

作为奖励,这里有一个更好的方法来实现Java 8:

public static int[] ArrayStringToArrayInt(String[] arrayString) 
{
return Stream.of(arrayString).mapToInt(Integer::parseInt).toArray();
}

此处一个错误关闭:

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

应该是:

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

这是错误的

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

应该是

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

数组的索引在0和长度-1 之间

变量i应从0变为N-1N是数组的长度。Java数组,就像C数组一样,是基于零的,这意味着您应该将它们从0迭代到N-1。所以你的for应该是这样的:

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

您可以使用流:

Arrays.stream(arrayString).mapToInt(Integer::parseInt).toArray()

只需更改此语句

用于(int i=0;i<=arrayString.length;i++)

用于(int i=0;i<arrayString.length;i++)

它会很好用的。ArrayIndexOutOfBoundsException表示您试图访问数组中不存在的索引。例如,

int[]a=新的int[5];

那么我可以使用的索引是

a[0]、a[1]、a[2]、a[3]和a[4]

我无法访问

a[5]

如果我尝试,我会得到ArrayIndexOutOfBoundsException。

这意味着数组索引从0开始,一直到数组长度-1。

希望这能有所帮助。

最新更新