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 - 如何将用空格分隔的整数读入数组的主要内容,如果未能解决你的问题,请参考以下文章