我正在尝试编写一个能够读取C文件(.cm)的扫描程序。扫描仪完成后,它将打印每个令牌以及令牌的行号。如果令牌是标识符,则打印标识符的词位或字符串值;或者如果令牌是数字,则打印该数字的值。我是否已将此代码编写为接近实现我的扫描仪?我在确定输入行是标识符还是int时遇到问题。我想这是我对代码基本结构的尝试。
import java.io.File;<br>
import java.util.Scanner;
public class ReadFile {
public static void main(String[] args) {
try {
Scanner input = new Scanner(System.in);
System.out.print("FileName: ");
File file = new File(input.next());
input = new Scanner(file);
count = 1;
while (input.hasNext()) {
if (input.hasNextInt()){
input.nextInt()
System.out.println(count + ", " + input);
count ++}
else if (input.hasNext){
System.out.println(count + ", " + line);
String line = input.next();
count ++}
}
input.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
我在Haskell中编写了类似的东西,我更喜欢函数式语言方法,但是想用Java编写一下。
答案 0 :(得分:0)
您可能想要考虑几件事。
首先,您假设每个令牌都出现在新行上。对于你正在做的事情,这可能是真实的;但使用input.next()
而不是input.nextLine()
会更灵活。这将读取下一个标记,而不关心它是否在新行上。
要读入下一个标记并确定它是否为整数,最简单的方法是查看input.hasNextInt()
。这将告诉您,无需超过令牌,是否可以将下一个令牌解析为整数。如果是,您可以使用input.nextInt()
阅读;如果没有,请使用String
阅读input.next()
。