0

":" の後にある文字列を認識するためには、scan.useDelimiter() を使用する必要があります。

同様のエントリのリストから次の行を取得するスキャナーを作成しています。

c : 20002 : The Dragon :     Dreama : 10000 :   1 :  22 :   9 :  237.20 :   60.47 :  354.56

これは私がこれまでに持っているものです:

    public Boolean readFile (){ //Fix tomorrow
    while ( input.hasNext () ) {
        char x =                stat.next().charAt(0);
        String line =           input.nextLine().trim();
        Scanner stat =          new Scanner(line).useDelimiter("\\s*:\\s*")

        if( line.length()== 0 || input.next().charAt(0) == '/' ) continue;
        switch ( x ) {
            case 'c' :
                int a =         stat.nextInt();
                String b =      stat.next();
                break;
            case 't' :
                //...

何らかの理由で、これを正しくスキャンできません。上記のエントリには、次の文字列が必要です。

20002, The Dragon, Dreama, 10000, etc.

ご覧のとおり、フレーズの端にあるスペースを無視する必要がありますが、「The Dragon」などのフレーズの間にスペースがある場合は、それを保持する必要があります。

次の質問は役に立ちませんでした: 質問 1 / 質問 2

4

5 に答える 5

4

使用するだけString.split()です:

String line = input.nextLine().trim();
String[] tokens = line.split("\\s*:\\s*");

質問で正規表現を再利用しているだけであることに注意してください。正規表現は、各トークンの冗長な先頭と末尾のスペースをすべて取り除きます。trim()入力全体では、メソッドの正規表現が一致せず、触れない先頭と末尾のスペースを削除する必要がありsplit()ます。

于 2013-06-12T16:00:49.703 に答える
3

代わりにString.splitを使用することを検討してください。

だから、あなたは持ってしまうでしょう -

while ( input.hasNext () ) {
    char x =                input.next().charAt(0);
    String[] words =           input.nextLine().split(":");
    for(String s : words){
        s.trim();
    }
    ....

また、最初の文字を取得する必要があるとは思いません。私はあなたのコードを見たことがないので、わかりません。後で使用することになるかもしれませんが、私には無関係に思えます。

于 2013-06-12T16:00:03.157 に答える