如何将由空格分隔的整数字符串转换为JAVA中的数组

Lea*_*ice 9 java arrays string

假设我有一个字符串"1 23 40 187 298".该字符串仅包含整数和空格.如何将此字符串转换为整数数组,即[1,23,40,187,298].这就是我的尝试方式

public static void main(String[] args) {
    String numbers = "12 1 890 65";
    String temp = new String();
    int[] ary = new int[4];
    int j=0;
    for (int i=0;i<numbers.length();i++)
    {

        if (numbers.charAt(i)!=' ')
            temp+=numbers.charAt(i);
        if (numbers.charAt(i)==' '){
            ary[j]=Integer.parseInt(temp);
            j++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,请提供一些帮助.谢谢!

Psh*_*emo 13

你忘记了


但更简单的方法是只用split(" ")创建令牌的临时数组,然后分析每个令牌int喜欢

String numbers = "12 1 890 65";
String[] tokens = numbers.split(" ");
int[] ary = new int[tokens.length];

int i = 0;
for (String token : tokens){
    ary[i++] = Integer.parseInt(token); 
}
Run Code Online (Sandbox Code Playgroud)

其他方法可能是使用Scanner及其nextInt()方法从您的输入返回所有整数.假设您已经知道所需数组的大小,您可以简单地使用

String numbers = "12 1 890 65";
int[] array = Stream.of(numbers.split(" "))
                    .mapToInt(token -> Integer.parseInt(token))
                    .toArray();
Run Code Online (Sandbox Code Playgroud)

使用Java 8,您也可以使用Streams来缩短您的代码

String numbers = "12 1 890 65";
int[] ary = new int[4];

int i = 0;
Scanner sc = new Scanner(numbers);
while(sc.hasNextInt()){
    ary[i++] = sc.nextInt();
}
Run Code Online (Sandbox Code Playgroud)


esi*_*n88 7

对于java 8+,您可以使用以下方式:

final Integer[] ints = Arrays.stream(numbers.split(" "))
        .map(Integer::parseInt)
        .toArray(Integer[]::new);
Run Code Online (Sandbox Code Playgroud)

或者,如果你需要原始的int,你可以使用这个:

final int[] ints = Arrays.stream(numbers.split(" "))
        .mapToInt(Integer::parseInt)
        .toArray();
Run Code Online (Sandbox Code Playgroud)