0

我的输入看起来像这样。假设我试图在打印出一堆文本后提取两个数字。

abcdef
abcdef
abcdef
abcdef
123 456

这是我尝试使用的伪代码。

input.useDelimiter(" "); //I've tried a lot of patterns to no avail.
while(!input.hasNextInt()){
    System.out.println(input.next());
}
System.out.println("Found Ints");
int posRow = input.nextInt();
System.out.println("posRow: "+posRow);
int posCol = input.nextInt();
System.out.println("posCol: "+posCol);

我的输出最终为

abcdef
abcdef
abcdef
abcdef
123
Found Ints
posRow: 456
NoSuchElementException

所以我假设问题是它正在读取文本的最后一行和第一个数字作为一个块而不是 int,因为没有空格。我试过使用 \r \n \r\n 等,但似乎无法弄清楚。

感谢您的任何帮助!

4

2 回答 2

0

尝试这个...

input.useDelimiter(Pattern.compile("\\s|\\n"));

这将使用空格或换行符作为分隔符。

问题是使用空格作为分隔符会导致所有第一行,数字之间的空格成为一个被评估的项目。这不是一个整数。然后下一个是,但是你的最终 nextInt 没有更多了,因此是例外。

于 2012-12-07T00:05:52.640 回答
0

我会使用hasNextLine()而不是hasNextInt,并且如果数字始终是最后一行,您可以单独拆分它。

这个怎么样?

input.useDelimiter(" ");
while(input.hasNextLine()){
    System.out.println(input.nextLine())
}
System.out.println("Found Ints");
int posRow = input.nextInt();
System.out.println("posRow: "+posRow);
int posCol = input.nextInt();
System.out.println("posCol: "+posCol);
于 2012-12-06T23:57:32.323 回答