0

ファイルから特定のテキストを読み取ろうとしています。テキスト形式は

@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 タグの後にその行をトークン化するにはどうすればよいですか?

4

1 に答える 1

1

methodでは、次のトークンを決定するためではなく、次のトークンをテストするScanner#next(String)ために正規表現が使用されるため、トークンを取得した後に引用符を処理する必要があると思います。

したがって、トークナイザーが を返すのではなく、トークナイザーが を返すxことを期待して、'x',その出力を機能させる必要があります。幸いなことに、これは難しくありません。これを行うための簡単で汚い方法は次のようになります。

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

Scannerデリミタを少し賢く使えば、コンマを処理できることにも注意してください。

`scanner.useDelimiter(",?\\s+");`
于 2013-06-09T16:26:41.113 に答える