Java - 如何将由空格分隔的整数读入数组

时间:2013-01-15 08:26:02

标签: java arrays string integer

我的项目遇到问题,因为我无法得到正确的结论,即读取由用户空格分隔的整数行并将值放入数组中。

    System.out.println("Enter the elements separated by spaces: ");
    String input = sc.next();
    StringTokenizer strToken = new StringTokenizer(input);
    int count = strToken.countTokens();
    //Reads in the numbers to the array
    System.out.println("Count: " + count);
    int[] arr = new int[count];

    for(int x = 0;x < count;x++){
        arr[x] = Integer.parseInt((String)strToken.nextElement());
    }

这就是我所拥有的,它似乎只是读取数组中的第一个元素,因为当初始化count时,由于某种原因它被设置为1。

任何人都可以帮助我吗?以不同的方式做这件事会更好吗?

5 个答案:

答案 0 :(得分:14)

只需进行一些微小的更改即可使代码正常工作。 错误在此行中:

String input = sc.next();

正如我在该问题的评论中指出的那样,它只读取输入的下一个标记。请参阅documentation

如果用

替换它
String input = sc.nextLine();

它会按照您的意愿执行,因为nextLine()会消耗整行输入。

答案 1 :(得分:4)

String integers = "54 65 74";
List<Integer> list = new ArrayList<Integer>();
for (String s : integers.split("\\s"))  
{  
   list.add(Integer.parseInt(s));  
}
list.toArray();

答案 2 :(得分:2)

还有其他方法可以实现同样的目标。但是当我尝试你的代码时,它似乎正常工作。

StringTokenizer strToken = new StringTokenizer("a b c");
int count = strToken.countTokens();
System.out.println(count);

它将计数打印为3.默认的demiliter为“”

我不知道你是如何获得输入字段的。可能是它没有以字符串格式返回完整的输入。

我认为您正在使用java.util.Scanner来读取输入

来自扫描仪的java doc。

  

扫描仪使用分隔符模式将其输入分解为标记,   默认情况下匹配空格。然后可以得到所产生的令牌   使用各种下一个转换为不同类型的值   方法

因此输入只返回一个整数而其余的无人值守

阅读本文。 Scanner#next(),您应该使用Scanner#nextLine()代替

答案 3 :(得分:2)

这将是一种更简单的方法 -

System.out.println("Enter the elements seperated by spaces: ");
String input = sc.nextLine();
String[] split = input.split("\\s+");
int[] desiredOP = new int[split.length];
int i=0;
for (String string : split) {
    desiredOP[i++] = Integer.parseInt(string);
}

答案 4 :(得分:0)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
.
.
.
StringTokenizer st = new StringTokenizer(br.readLine());
int K = Integer.parseInt(st.nextToken());
int N= Integer.parseInt(st.nextToken());