有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

令牌Java扫描程序模式

我正在尝试从文件中读取特定文本。文本格式为

@INFO

@DATA
'x', -1, 1 
'y', -1, 1

现在我必须标记@DATA标记后面的文本

x
-1
1
y
-1
1

现在我知道了

Scanner in=null;    
try {
    in=new Scanner(file);
} catch (FileNotFoundException e) {
    return 1;
}

while(in.hasNext() && !in.next().equals("@DATA"));

while(in.hasNext()) {
    try {
        Object[] obj = new Object[3];
        obj[0] = in.next();
        obj[1] = in.nextDouble();
        obj[2] = in.nextDouble();

    } catch(Exception e) {
        return 2;
    }
}
return 0;

它工作得几乎很好(得到“x”,但我必须得到引号之间的单词(')in.next("'([^']*)'");不起作用(java.util.InputMismatchException)。如何标记@DATA标记后面的行


共 (1) 个答案

  1. # 1 楼答案

    我认为在拿回标记后,您必须处理引号,因为在the ^{} method中,正则表达式用于测试下一个标记,而不是确定下一个标记

    因此,与让标记器返回x不同,您必须期望标记器返回'x',,然后使输出工作。幸运的是,这并不难。一种快速而肮脏的方法如下所示:

    String quotedToken=scanner.next();
    quotedToken = quotedToken.replace('\'', ' ');
    quotedToken = quotedToken.replace(',', ' ');
    quotedToken = quotedToken.trim();
    

    可能还值得注意的是,如果您对分隔符有点了解,您可以使用Scanner来处理逗号:

    `scanner.useDelimiter(",?\\s+");`