Java 扫描仪只读取文件名,不读取其他内容
我正在尝试实现一个基本的lexer。我现在正忙于文件解析Java 扫描仪只读取文件名,不读取其他内容,java,parsing,java.util.scanner,Java,Parsing,Java.util.scanner,我正在尝试实现一个基本的lexer。我现在正忙于文件解析 public ArrayList<Token> ParseFile () { int lineIndex = 0; Scanner scanner = new Scanner(this.fileName); while (scanner.hasNextLine()) { lineIndex++; String line = scanner.nextLine();
public ArrayList<Token> ParseFile () {
int lineIndex = 0;
Scanner scanner = new Scanner(this.fileName);
while (scanner.hasNextLine()) {
lineIndex++;
String line = scanner.nextLine();
if (line.equals(""))
continue;
String[] split = line.split("\\s");
for (String s : split) {
if (s.equals("") || s.equals("\\s*") || s.equals("\t"))
continue;
Token token = new Token(s, lineIndex);
parsedFile.add(token);
}
}
scanner.close();
return this.parsedFile;
}
publicArrayList解析文件(){
int-lineIndex=0;
Scanner Scanner=新扫描仪(此.fileName);
while(scanner.hasNextLine()){
lineIndex++;
字符串行=scanner.nextLine();
if(第行等于(“”)
继续;
String[]split=line.split(\\s”);
用于(字符串s:拆分){
如果(s.equals(“”)|s.equals(\\s*”)|s.equals(“\t”))
继续;
Token Token=新的Token(s,lineIndex);
添加(令牌);
}
}
scanner.close();
返回此.parsedFile;
}
这是我的文件名为“p++.ppp”
#包括
使用名称空间std;
INTA;
int b;
int main(){
cin>>a;
cin>>b;
while(a!=b){
如果(a>b)
a=a-b;
如果(b>a)
b=b-a;
}
您可能误解了扫描仪的API。从以下文档:
构造一个新的扫描程序,该扫描程序生成从指定字符串扫描的值
参数:
源-要扫描的字符串
它不是一个文件名,只是一个字符串
您应该使用扫描器(文件)
构造函数,或者更好的是使用扫描器(文件、字符串)
构造函数来指定编码。例如:
try (Scanner scanner = new Scanner(new File(this.fileName), "UTF_8")) {
...
}
(注意使用了try-with-resources语句,以便扫描程序自动关闭。)是的,我承认只浏览了一下扫描程序api。我甚至没有查看过构造函数。谢谢。但是我确实获得了构造函数扫描程序(文件,字符集)未定义
@Kalec:您使用的Java版本是什么?1.7.0_13运行时环境构建b20@Kalec:你说得对-没有字符集
重载,这很奇怪。我不知道为什么会有。编辑。。。
try (Scanner scanner = new Scanner(new File(this.fileName), "UTF_8")) {
...
}