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

Posted

技术标签:

【中文标题】Java - 如何将用空格分隔的整数读入数组【英文标题】:Java - How to read integers separated by a space into an array 【发布时间】:2012-12-29 07:29:41 【问题描述】:

我的项目有问题,因为我无法正确开始,即从用户那里读取一行由空格分隔的整数并将值放入数组中。

    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。

谁能帮助我?换一种方式会更好吗?

【问题讨论】:

阅读next()方法的[文档](docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#next()。 每个人都给出了明显的替代解决方案,但在 OP 的代码中找到错误会更有趣(我没有)。 @dystroy:错误是,他使用的是sc.next(); 而不是sc.nextLine(); @jlordo 很好看。这应该是(唯一的)答案。 @NickHolt:我很确定它引用了java.util.Scanner 【参考方案1】:
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());

【讨论】:

【参考方案2】:

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

String input = sc.next();

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

如果你用

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

它会做你想做的事,因为nextLine() 会消耗整行输入。

【讨论】:

+1 以获得正确的解释。 OP 的其余代码可能会更好,但大部分都很好。 好的,这听起来真的很无聊,但我将其设置为 next 的原因是因为某种原因,当我输入 sc.nextLine() 时,它只是跳过用户输入并继续执行程序。这真的很奇怪...... @SamFrench:复制了你的代码,用nextLine(); 运行它并且运行良好。再试一次,如果问题仍然存在,您可能在其他地方出错了。【参考方案3】:

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

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

【讨论】:

String input = sc.next(); 只会读取下一个token,所以代码会出现和OP一样的问题。 @jlordo - 非常感谢您的评论。我已经更新了我的代码。请检查。【参考方案4】:

有其他方法可以达到同样的效果。但是当我尝试您的代码时,它似乎可以正常工作。

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

它打印计数为 3。默认分隔符是“”

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

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

来自扫描仪的 java 文档。

扫描器使用分隔符模式将其输入分解为标记, 默认情况下匹配空格。然后生成的令牌可能是 使用各种 next 转换为不同类型的值 方法。

因此输入只返回一个整数,其余的无人看管

阅读本文。 Scanner#next(),你应该改用Scanner#nextLine()

【讨论】:

【参考方案5】:
String integers = "54 65 74";
List<Integer> list = new ArrayList<Integer>();
for (String s : integers.split("\\s"))  
  
   list.add(Integer.parseInt(s));  

list.toArray();

【讨论】:

@dystroy 我提出了 equals 和最简单的代码。我回复了Would it be better to do this a different way? 是的,但是您的初始代码完全有缺陷(现已修复)。我不知道谁能投票,除了人们只是来检查答案中的某个地方是否存在“分裂”...... 事实上它并不能解决 jlordo 看到的真正问题。 好的,我已经这样做了,但问题是由于某种原因扫描仪不会使用 sc.nextLine() 命令等待用户输入,它只是跳到下一个用户输入跨度>

以上是关于Java - 如何将用空格分隔的整数读入数组的主要内容,如果未能解决你的问题,请参考以下文章

将由空格分隔的未知数量的整数读入每行一个向量

如何将用空格分隔的用户的连续值放入列表中? [复制]

将空格分隔的字符串读入 Bash 中的数组

Java中怎么读入一行输入空格隔开的多个数据

在C ++中将用空格分隔的字符串读入向量[关闭]

Java中怎么读入一行输入空格隔开的多个数据