在Java中将字符串数组转换为整型数组

45

我是Java编程的新手。我的问题是:我有一个String数组,但是当我试图将其转换为int数组时,我一直得到以下错误:

java.lang.NumberFormatException

我的代码是

private void processLine(String[] strings) {
    Integer[] intarray=new Integer[strings.length];
    int i=0;
    for(String str:strings){
        intarray[i]=Integer.parseInt(str);//Exception in this line
        i++;
    }
}
任何帮助将不胜感激,谢谢!!!

3
你要传递哪些字符串? - BoltClock
1
字符串中的字符必须全部为十进制数字,但第一个字符可以是ASCII减号“-”('\u002D')以表示负值。返回结果整数值,就像将参数和基数10作为参数传递给parseInt(java.lang.String,int)方法一样。 - Dan Grossman
3
当字符串不是正确格式的整数时,就会发生这种情况。而且,你应该使用int[]而不是Integer[] - Mike Samuel
嗨,发现错误了,字符串数组中存在一个尾随的"\r"。因此,3被视为"3\r"。我移除了尾随的 \r,它就成功了。谢谢。 - Manoj I
请在以后复制/粘贴异常和错误信息。您可以编辑您的问题以添加这些细节。 - Andrew Thompson
9个回答

116

比方说,我们有一组字符串数组:

String[] strings = {"1", "2", "3"};

使用lambda表达式[1] [2](自Java 8起),您可以执行以下操作

int[] array = Arrays.asList(strings).stream().mapToInt(Integer::parseInt).toArray();

这是另外一种方式:

int[] array = Arrays.stream(strings).mapToInt(Integer::parseInt).toArray();

—————————
注释
  1. Java Lambda表达式The Java Tutorials中的介绍。
  2. Java SE 8: Lambda快速入门


2
如何使用相同的Lambda表达式将字符串数组转换为整数对象数组? - ffguven
@ffguven 我觉得自动装箱应该在需要时处理这个问题,或者我有什么遗漏吗? - Ayush
1
@ffguven 好的,一年后我偶然发现了同样的线程,看到我的先前评论,意识到我实际上漏掉了某些东西。 一种方法(我不知道是否是最好的方法)是: Integer[] array = Arrays.stream(strings).mapToInt(Integer::parseInt).boxed().toArray(Integer[]::new); - Ayush

23
为了去掉额外的空格,你可以像这样更改代码:
intarray[i]=Integer.parseInt(str.trim()); // No more Exception in this line

12
为了帮助调试并使您的代码更好,请执行以下操作:
private void processLine(String[] strings) {
    Integer[] intarray=new Integer[strings.length];
    int i=0;
    for(String str:strings){
        try {
            intarray[i]=Integer.parseInt(str);
            i++;
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException("Not a number: " + str + " at index " + i, e);
        }
    }
}

此外,从代码整洁度的角度来看,你可以通过这样做减少代码行数:

for (String str : strings)
    intarray[i++] = Integer.parseInt(str);

1
我建议不要采纳你的“代码整洁”提案 - 它会使代码更加混乱,而不是更整洁。 - Paŭlo Ebermann
7
我发现“更整洁”的代码非常易读。简洁的代码看起来很不错。 :) - La-comadreja
@La-comadreja 我不这么认为。非整洁方法更加“自然”。 - Mugen

8

另一种简便的方法:

int[] myIntArray = Arrays.stream(myStringArray).mapToInt(Integer::parseInt).toArray();

2

如果你需要获取一个 Integer[] 数组,你可以使用以下代码:

Integer[] intarray = Stream.of(strings).mapToInt(Integer::parseInt).boxed().toArray(Integer[]::new);

您的代码:
private void processLine(String[] strings) {
    Integer[] intarray = Stream.of(strings).mapToInt(Integer::parseInt).boxed().toArray(Integer[]::new);
}

请注意,这仅适用于Java 8及更高版本。

1
这是因为您的字符串不严格包含以字符串格式表示的整数。它包含字母数字字符。

1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class array_test {

public static void main(String args[]) throws IOException{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();

String[] s_array = line.split(" ");

/* 将以空格分隔的数字数组拆分为字符串数组。*/

Integer [] a = new Integer[s_array.length];

创建大小等于字符串数组的整数数组。
    for(int i =0; i<a.length;i++)
    {
        a[i]= Integer.parseInt(s_array[i]);// Parsing from string to int

        System.out.println(a[i]);
    }

    // your integer array is ready to use.

}

}


1
private void processLine(String[] strings) {
    Integer[] intarray=new Integer[strings.length];
    for(int i=0;i<strings.length;i++) {
        intarray[i]=Integer.parseInt(strings[i]);
    }
    for(Integer temp:intarray) {
        System.out.println("convert int array from String"+temp);
    }
}

1
public static int[] strArrayToIntArray(String[] a){
    int[] b = new int[a.length];
    for (int i = 0; i < a.length; i++) {
        b[i] = Integer.parseInt(a[i]);
    }

    return b;
}

这是一个简单的函数,可以帮助你。你可以像这样使用它:
int[] arr = strArrayToIntArray(/*YOUR STR ARRAY*/);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接