使用扫描仪在.txt文件中显示特定单词



我被卡住了,需要你的帮助(是的,这是家庭作业),我想做的是让我的代码读取文本文件中的内容,并按特定单词输出单词。例如,我希望它输出所有以字母"g"开头的单词。

如果我没有很好地解释,这里有一个伪代码:

BEGIN
Get the initial letter from the user
While there are more entries in the file
Get the next personal name
Get the next surname
Get the next year info
If the surname starts with the initial letter
Output the person name, surname and year info
End while
END

到目前为止,我已经成功地完成了这项工作,现在我被困在正确输出名称的地方。如有任何帮助或教程,我们将不胜感激。

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class PrimeMinisters
{
    public static void main(String[] args) throws FileNotFoundException
    {
        // ask the user for the first letter
        Scanner keyboard = new Scanner(System.in);
        System.out.print("What is the first letter? ");
        String input = keyboard.next().toLowerCase();
        char firstLetter = input.charAt(0);
        // open the data file
        File pmFile = new File ("OZPMS.txt");
        // create a scanner from the file
        Scanner pmInput = new Scanner (pmFile);
        // read one line of data at a time, processing each line
        while(pmInput.hasNext())
        {
            String names = pmInput.next();
            System.out.println(names);
        }
        // be polite and close the file
        pmInput.close();
    }
}

我建议使用nextLine()而不是next()。然后,您可以使用StringstartsWith(String stringsequence)方法,该方法返回一个布尔值,以获得所有以您选择的字母开头的值:

  while(pmInput.hasNextLine())
        {
            String names = pmInput.nextLine();
            System.out.println(names);
            if(names.startsWith("g")) {
              //the name begins with letter g do whatever
            }
        }

您可以在这里查看更多String方法:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

由于您的要求是查看姓氏的第一个字母,因此在阅读每一行时(同时检查用户输入的是否是姓氏的第一字母),标记每一行会更容易。假设该行按照您上面所述的顺序,则姓氏将是标记#2(数组的索引1)。

public class PrimeMinisters
    {
        public static void main(String[] args) throws FileNotFoundException
        {
            // ask the user for the first letter
            Scanner keyboard = new Scanner(System.in);
            System.out.print("What is the first letter? ");
            String input = keyboard.next().toLowerCase();
            char firstLetter = input.charAt(0);
            // open the data file
            File pmFile = new File ("OZPMS.txt");
            // create a scanner from the file
            Scanner pmInput = new Scanner (pmFile);
            // read one line of data at a time, processing each line
            while(pmInput.hasNextLine())
            {
                String names = pmInput.nextLine();
                // Break line into tokens. This is assuming that there are only
                // 3 strings per line in the following order (personal name, surname, yearinfo)
                //
                String[] info = names.split("\s"); 
                 // Check 2nd string in line (since you are looking for the first   character in 
                 // the surname and not the personal name.
                 //
                if(info[1].startsWith(input))  
                {
                      System.out.println(info[0] + "t" + info[1] + "t" + info[2]);
                }
            }
            // be polite and close the file
            pmInput.close();
        }
    }