为什么数组中有额外的值?

时间:2018-05-14 01:49:36

标签: java arrays

我的代码在这里:

import java.util.Arrays;

public class Q1102 {
    public static void main(String[] args) {
        String temp = "1 3 5 7 6";
        int[] array1 = new int[temp.length()];
        for (int i = 0; i < temp.length(); i += 2) {
            int mounth = Integer.parseInt(String.valueOf(temp.charAt(i)));
            array1[i] = mounth;
        }
        System.out.println(Arrays.toString(array1));
    }
}

由于一些奇怪的原因,程序输出:

[1, 0, 3, 0, 5, 0, 7, 0, 6]

有人可以告诉我为什么会这样,以及如何删除额外的零?

我已经打印出输入数组时输入的数值,并且没有任何额外的零。

3 个答案:

答案 0 :(得分:4)

您使用的字符转换方式仅适用于单位数字,它在很多方面都很脆弱。相反,在空格上拆分String,然后解析这些标记。像,

String temp = "1 3 5 7 6";
String[] tokens = temp.split("\\s+");
int[] array1 = new int[tokens.length];
for (int i = 0; i < tokens.length; i++) {
    array1[i] = Integer.parseInt(tokens[i]);
}
System.out.println(Arrays.toString(array1));

输出(我认为你的预期)

[1, 3, 5, 7, 6]

答案 1 :(得分:0)

  

此行temp.length()中的问题。它将以9的长度返回string。如您所知,java采用默认值0。这就是为什么您得到额外的零。

import java.util.Arrays;

public class Q1102 {
public static void main(String[] args) {
    String temp = "1 3 5 7 6";
    int length = (temp.length()  + 1)/2;
    int[] array1 = new int[length];
    for (int i = 0, k = 0; i < temp.length(); i +=2, k++) {
        int mounth = Integer.parseInt(String.valueOf(temp.charAt(i)));
        array1[k] = mounth;
    }
    System.out.println(Arrays.toString(array1));

}

答案 2 :(得分:-2)

使用String&#39; replaceAll()功能替换空格。请找到以下工作代码。

public class Q1102 {

    public static void main(String[] args) {
        String temp = "1 3 5 7 6";
        temp = temp.replace(" ", "");
        int length = temp.length();
        int[] array = new int[length];
        for (int i=0; i<length; i++)
            array[i] = Integer.parseInt(String.valueOf(temp.charAt(i)));

        System.out.println(Arrays.toString(array));
    }
}