缓冲读取器空格分隔输入。

5

首先,我想提到我并不是很熟练的Java程序员,我在StackOverFlow上搜索了解决我的问题的方法,但要么我没有找到,要么我没有理解答案,所以现在我来问:

我想开始使用BufferedReader,但是我没有找到任何我能够正确理解的指南,所以我从各个方面拾取了一些信息,并编写了这个示例:

BufferedReader input = new BufferedReader (new InputStreamReader (System.in));
int x = Integer.parseInt(input.readLine());
String y = input.readLine();
System.out.println(x);

这段代码对于输入的34,然后按回车键,再输入abc是可以正常工作的。但是,根据我的要求,我需要将输入34 abc通过空格分隔一起输入,并且x将获得34y将获得abc。使用Scanner时可以实现这个目标,但问题是Scanner会因为速度慢而超时,导致我正在做的练习无法完成。

有没有简单的方式可以像Scanner一样获取这些以空格分隔的输入呢?


正如我之前提到的,我并不是很了解Java,并不知道split方法是什么,尽管它并不适用于我的情况,但Sanira给了我一个包括StringTokenizer的解决方案。我不知道它是什么,但它完美地解决了我的问题,所以我想我会采用这个方案。 - shaythan
有趣的是,如果string.split(" ")无法工作,但StringTokenizer可以工作,那么这意味着2个输入不是由空格分隔,而是由其他一些空白字符分隔。StringTokenizer有点类似于string.split("\s"),其中\s表示任何空白字符。 - Vikrant Goel
其实这是我的误解split的工作原理,最终我使用了split(因为误解了分词器),现在分词器也可以工作了,但我猜那就是整个问题的关键,现在我两个都明白了。 - shaythan
5个回答

7

试试这个:

StringTokenizer tk = new StringTokenizer(input.readLine());
int m = Integer.parseInt(tk.nextToken());
String s = tk.nextToken();

这比string.split()更快。


非常感谢!它起作用了。另外,StringTokenizer是什么,我在哪里可以学到更多关于它的知识? - shaythan
谢谢。最后一个问题,我该如何换行呢? 比如当输入是 23 sdf 35 gtr 我需要跳到下一行并从下一行获取下一个输入。 - shaythan
是的,最终我想通了,但在那之前,我用 split 方法解决了这个问题。无论如何,非常感谢! - shaythan

0
如果您想从同一行读取2个值,则不能将整行解析为整数,否则会出现NumberFormatException异常。
首先读取该行,然后在空格处进行分割,最后将第一个部分解析为整数。
String line = reader.readLine();
String[] splitLine = line.split(" ");
Integer x = Integer.parseInt(splitLine[0]);
String y = splitLine[1];

line.split将返回一个String[],因此会出现类型不匹配的错误。 - Aditya P
谢谢,已经修复了。 - zubergu

0
String line = input.readLine();
String []tokens = line.split(" ");
int x = Integer.parseInt(tokens[0]);
String y = tokens[1];

使用split()函数将输入拆分,并从数组中访问它


0
你无法在 input.readLine() 上使用 String.split() 函数吗?
String line = input.readLine(); int x = Integer.parseInt(line.split(" ")[0]);

0
你可以使用以下示例,在同一行中使用空格分隔的方式读取多个整数,例如:1 5 5。
StringTokenizer tk = new StringTokenizer(input.readLine());
int a = Integer.parseInt(tk.nextToken());
int b = Integer.parseInt(tk.nextToken());
int c = Integer.parseInt(tk.nextToken());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接