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

时间:2015-03-23 20:09:30

标签: 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++;
        }
    }
}

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

5 个答案:

答案 0 :(得分:11)

你忘记了

  • 在解析它之后将temp重置为空字符串以创建新数字的位置
  • 在字符串末尾没有空格,所以

    if (numbers.charAt(i) == ' ') {
        ary[j] = Integer.parseInt(temp);
        j++;
    }
    
    不会调用

    ,这意味着您需要调用

    ary[j] = Integer.parseInt(temp);
    
    循环后再次


但更简单的方法是使用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); 
}

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

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

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

int[] array = Stream.of(numbers.split(" "))
                    .mapToInt(token -> Integer.parseInt(token))
                    .toArray();

答案 1 :(得分:7)

对于java 8+,你可以这样使用:

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

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

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

答案 2 :(得分:0)

将tmp String重置为&#34;&#34;在解析整数之后,除非您希望继续将字符串的所有数字附加在一起。还有其他选择 - 例如将String拆分为空间characeter上的数组,然后单独解析数字

答案 3 :(得分:0)

试试这个,

public static void main(String[] args) {
    String numbers = "12 1 890 65";
    String[] parts = numbers.split(" ");

    int[] ary = new int[4];
    int element1 = Integer.parseInt(parts[0]);
    int element2 = Integer.parseInt(parts[1]);
    int element3 = Integer.parseInt(parts[2]);
    int element4 = Integer.parseInt(parts[3]);

    ary[0] = element1;
    ary[1] = element2;
    ary[2] = element3;
    ary[3] = element4;

    for(int i=0; i<4; i++){
        System.out.println(ary[i]);
    }

}

答案 4 :(得分:0)

我在android开发中遇到了类似的问题。我想将长字符串转换为两个数组-String数组xtokens和int数组ytokens。

String result = "201 5 202 8 203 53 204 8";             
String[] tokens = result.split(" ");
String[] xtokens = new String[tokens.length/2 + 1];
int[] ytokens = new int[tokens.length/2 + 1];

for(int i = 0, xplace = 0, yplace = 0; i<tokens.length; i++){
    String temptoken = new String(tokens[i]);
    if(i % 2 == 0){
        xtokens[xplace++] = temptoken;
    }else {
        ytokens[yplace++] = Integer.parseInt(temptoken);
    }
}

您可以首先将此字符串转换为以空格分隔的字符串数组,然后将其转换为int数组。