如何从字符串中解析int? (JAVA)

时间:2012-12-06 21:10:14

标签: java java.util.scanner

我的输入看起来像这样。假设我打算在打印出一串文本之后拉两个数字。

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等等,似乎无法解决这个问题。

感谢您的帮助!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

试试这个......

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

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

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