1

複数の行を Pig Latin に翻訳するメソッドを作成しました。予想される入力は次のようになります。

The cat jumped over the fox

私のコードは、Pig Latin に正しく翻訳され、適切な書式設定 (つまり、単語が区切られ、行が区切られている) でテキストを出力します。しかし、私はスキャナー クラスの 2 つのインスタンスを使用してこれを行います。2 つのインスタンスを削除する方法を誰か提案できますか?それらを1つに凝縮しますか?

ところで、他の提案をお気軽に提供してください。ただし、私はまだ学習中の初心者であることを覚えておいてください。

    File file = new File("projectdata.txt");
    try 
    {
        Scanner scan1 = new Scanner(file);
        while (scan1.hasNextLine()) 
        {
            Scanner scan2 = new Scanner(scan1.nextLine());
            while (scan2.hasNext())
            {
                String s = scan2.next();
                boolean moreThanOneSyllable = Syllable.hasMultipleSyllables(s);
                char firstLetter = s.charAt(0);
                String output = "";
                if (!moreThanOneSyllable && "aeiou".indexOf(firstLetter) >= 0)
                    output = s + "hay" + " ";
                else if (moreThanOneSyllable && "aeiou".indexOf(firstLetter) >= 0)
                    output = s + "way" + " ";
                else 
                {
                    String restOfWord = s.substring(1);
                    output = restOfWord + firstLetter + "ay" + " ";
                }
                System.out.print(output);
            }
            System.out.println("");
            scan2.close();
        }
        scan1.close();
    } 

    catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }
}

注: 数日前にコード オーバーフローに同様のものを投稿し、そこで得られた回答からいくつかのアドバイスを得ました。ただし、2 つのスキャナー クラスを使用しないことを推奨する人もいましたが、私は書式設定を正しく行うことができませんでした。

4

1 に答える 1

0

外側のループを使用すると、ファイルを 1 行ずつ読み取ることができます。外側のループでは、読み取った各行を文字列として扱います。

Scanner scan2 = new Scanner(scan1.nextLine());

Stringこれで、 aを使用して aを読み取ろうとしていますScanner。次のように変更する必要があります。

String line = scan1.nextLine();

行を文字列 (単語) の配列に分割して処理します。

String[] words = line.split("\\s+");

内側のループは、配列を反復処理するだけです。

for(String word : words) {
    //your existing logic can go here
}

アップデート

次のように空行をエスケープするだけです。例外処理は必要ありません。

String line = scan1.nextLine();
if(line.isEmpty()) {
    System.out.println();
    continue;
}
于 2012-11-18T18:34:11.197 に答える