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

时间:2015-04-19 17:44:39

标签: java arrays parsing

我是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;
}

我希望这个方法做的是输入数组:[&#34; 1&#34;,&#34; 2&#34;,&#34; 3&#34;]每个项目都是一个字符串 并返回[1,2,3],其中每个项目都是int。

我用这段代码调用方法

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类从用户那里获取输入,并希望他们能够同时输入多个数字。然后我使用分隔符模式将输入转换为数组。虽然这看起来很好,但我只能弄清楚如何使输入成为一个字符串数组,而不是整数,这是我的问题。

所以我想我要问的是 1)为什么我的代码不起作用? 和 2)是否有更简单的方法从用户那里获取输入并将其转换为一个整数数组?

对于那些想要查看我的整个代码的人来说,这是

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

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;
    } 
}

6 个答案:

答案 0 :(得分:8)

你得到了错误的范围:

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();
}

答案 1 :(得分:4)

Off-by-one error此处:

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

应该是:

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

答案 2 :(得分:2)

这是错误的

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

应该是

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

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

答案 3 :(得分:0)

变量i应该从0变为N-1N是数组的长度。 Java数组(如C语言数组)从零开始,这意味着您应该将它们从0迭代到N-1。所以你的for应该是这样的:

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

答案 4 :(得分:0)

您可以使用流:

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

答案 5 :(得分:0)

只需更改此声明

即可
  

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

  

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

它会正常工作。 ArrayIndexOutOfBoundsException意味着您尝试访问不存在的数组中的索引。 例如,

  

int [] a = new int [5];

那么我可用的指数是

  

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

我无法访问

  

a [5]

如果我尝试我会得到ArrayIndexOutOfBoundsException。

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

希望这有帮助。