2

我有一个字符串作为输入,它是一组数字,它们之间有空格,例如:

"30 129 48 29 110 90"

我想要做的是获取该字符串并将其作为整数输入到数组中,而无需首先使用将数字存储为字符串的第二个数组。这就是我知道该怎么做:

String line = input.nextLine();
String[] arr = line.split(" ");
int[] array = new int[arr.length];


for (int i = 0; i < arr.length; i++){
    array[i] = Integer.parseInt(arr[i]);
}

我不想制作 2 个数组来完成这项工作,而是以某种方式在 for 循环中一次完成,我只是想要这样,因为它对我的眼睛更好,我喜欢编写干净的代码,我会以后可以轻松改正。

编辑:在jogabonito的回答之后,这就是我设法做的

Scanner input = new Scanner(System.in);

    System.out.printf("Input: ");

    StringTokenizer line = new StringTokenizer(input.nextLine());
    int[] numbers = new int[line.countTokens()];


    for (int i = 0; line.hasMoreTokens(); i++){
        numbers[i] = Integer.parseInt((String)line.nextElement());
    }
4

4 回答 4

4

您当前的方法很好,但是如果您希望“可以”使用StringTokenizer来做到这一点。创建一个大小由 确定的 int[] countElements(),然后在 while 循环中执行Integer.parseInt(tokenizer.nextElement())

测试代码:

    String input = "30 129 48 29 110 90";
    StringTokenizer tokenizer = new StringTokenizer(input);
    int count = tokenizer.countTokens();
    int x[] = new int[count];
    int i=0;
    while (tokenizer.hasMoreElements()) {
        x[i++] = Integer.parseInt((String)tokenizer.nextElement());
    }
于 2012-05-17T11:36:54.170 回答
1

您可以使用扫描仪

Scanner sc = new Scanner(System.in);
while sc.hasNextInt()
   int i = sc.nextInt();

我不知道它是否更具可读性,或者即使它的性能更好。但这肯定是另一种方式。而且你不能事先知道有多少个整数,所以你需要使用一个列表。

于 2012-05-17T11:32:49.867 回答
1

您确定要使用数组而不是Collection吗?

我认为大致如下

String input = "30 129 48 29 110 90";
List<Integer> list = new ArrayList<Integer>();

for (String token: input.split(" ")) {
    list.add( Integer.valueOf( token ) );
}

您当然可以将列表转换为数组:

Integer[] array = list.toArray( new Integer[] {} );
于 2012-05-17T11:58:16.470 回答
0

我只是想要那样,因为它对我的眼睛更好,而且我喜欢编写干净的代码,以后我可以很容易地纠正它。

在这种情况下,不要改变任何事情。你所拥有的可能是可读的。

于 2012-05-17T11:30:56.910 回答