Java 扫描仪只读取文件名,不读取其他内容

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();

我正在尝试实现一个基本的lexer。我现在正忙于文件解析

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")) {
    ...
}