try {
Scanner sc = new Scanner(new File("testing.txt"));
while (sc.hasNextInt()){
int i = sc.nextInt();
//timing.add(i);
System.out.println(i);
}
sc.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
}
文本文件中包含int和字符串。我可以用它来打印文本文件中的单词,但不能打印数字。
文本文件包括以下内容:
Michael 3000
7000 Bilbo
我喜欢2000号你呢?不, 我喜欢9000
答案 0 :(得分:3)
你的第一个值(“Michael”)不是一个整数,因此它永远不会进入循环体内。
也许您想要将代码更改为循环,直到它到达文件末尾,读取和打印整数,但消耗(不打印)非整数值。所以像这样:
import java.util.*;
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(new File("test.txt"));
while (sc.hasNext()) {
if (sc.hasNextInt()) {
System.out.println(sc.nextInt());
} else {
// Just consume the next token
sc.next();
}
}
sc.close();
}
}
答案 1 :(得分:0)
问题是您首先要检查int
。首先没有int
因此它将退出您的while
循环而不执行任何操作:
while (sc.hasNextInt()){
Michael 3000
迈克尔不是int
它是String
所以没有hasNextInt()
有hasNext()
和hasNextLine()
......
你能做的是:
while (sc.hasNext()){
try
{
System.out.println(Integer.parseInt(sc.next());
}catch(Exception e){}
}
答案 2 :(得分:0)
您永远不会输入while
循环。因为第一个输入Michael
不是数字。
解决方案是采用.next()
并使用try-catch
解析int
:
while (sc.hasNext() {
String input = sc.next();
try {
int printInt = Integer.parseInt(input);
System.out.println(printInt);
} catch () {}
答案 3 :(得分:0)
问题是hasNextInt
将为您的初始字符串标记(false
)返回"Michael"
,因此您的循环将永远不会执行任何语句。
您可以解析每一行并推断令牌是否可以转换为整数类型:
while (sc.hasNext()) {
try {
System.out.println(Integer.parseInt(sc.next()));
} catch (NumberFormatException nfe) {
// nope
}
}
会打印......
3000
7000
2000
9000
答案 4 :(得分:0)
问题是你有各种单词和数字。当您致电mv logfile logfile.copy
cp logfile.copy logfile
rm logfile.copy
时,它会检查" Michael",它不是sc.hasNextInt()
,因此它会返回integer
并且永远不会执行。在这种情况下,您可以读取整行,并将其拆分为空格。然后使用false
检查每个单词是否为integer
。您还可以使用regex
块进行检查,并尝试解析该块内的try...catch
。
integer