1

我创建了一种将多行翻译成 Pig Latin 的方法。预期的输入如下所示:

The cat jumped over the fox

我的代码输出文本,正确翻译成 Pig Latin 并具有正确的格式(即单词分开,行分开。但是,我通过使用扫描仪类的两个实例来做到这一点。谁能建议我如何删除这两个实例并将它们浓缩成一个?

顺便说一句,请随时提供任何其他建议,但请记住,我是一个仍在学习的新手!

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

注意:几天前我在 Code Overflow 上发布了类似的内容,并从那里给出的答案中获得了一些建议。然而,虽然有人建议不要使用两个扫描仪类,但我就是无法正确格式化。

4

1 回答 1

0

使用您的外循环,您可以逐行读取文件。使用外循环,您将读取的每一行都视为一个字符串。

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 回答