【问题标题】:How to read a line from a txt file with int and String elements?如何从带有 int 和 String 元素的 txt 文件中读取一行?
【发布时间】:2015-06-16 21:30:09
【问题描述】:

我正在尝试通过读取 txt 文件来创建列表。例如:

12345; Mary Jane ; 20
12365; Annabelle Gibson; NA

每一行包含:数字;姓名;等级(等级可以是字符串或整数)

我创建了以下方法;

public static  List <Pauta>leFicheiro( String nomeF) throws       FileNotFoundException{
    List<Pauta> pautaT = new LinkedList<Pauta>();
    try {
    Scanner s = new Scanner(new File (nomeF));
        try{
            List<Pauta> pautaS =pautaT;
            while ( s.hasNextLine()){
                String line = s.nextLine();
                String tokens[]= line.split(";");
                if(s.hasNextInt()) {
                    System.out.println ("next int = " + s.nextInt());
            }
                pautaS.add(new Pauta (s.nextInt(), tokens[1],tokens[2]);
            }
            pautaT = pautaS;
        }
    finally {
        s.close();
    }
    }
        catch (FileNotFoundException e){
            e.printStackTrace();
        }
        catch (ParseException e){
            e.printStackTrace();
        }       
    return pautaT;
}

Pauta 是一个接收参数(int、String、String)的类,我认为 Grade as a String 会使其更简单,但如果您有关于如何通过拥有它来创建 List(主要目标)的想法String 或 int 我将不胜感激。

现在的问题是:s.nextInt() 部分返回错误:InputMismatchException

所以我输入了以下代码:

catch (InputMismatchException e) {
System.out.print(e.getMessage());}

表示它返回一个空值。

我该如何解决这个问题?

【问题讨论】:

  • 即使 s.hasNextInt() 返回 false,您也正在调用 s.nextInt()。如果没有下一个 int,您希望 s.nextInt() 返回什么?

标签: java exception collections java.util.scanner readfile


【解决方案1】:

不使用 s.nextInt(),而是将第一个标记解析为整数。

请参见下面的示例。

public static void main(String... args) throws FileNotFoundException {
        List<Pauta> pautaT = new LinkedList<Pauta>();
        try {
            Scanner s = new Scanner(new File("test.txt"));
            try{
                List<Pauta> pautaS =pautaT;
                while ( s.hasNextLine()){
                    String line = s.nextLine();
                    String tokens[]= line.split(";");
                    pautaS.add(new Pauta (Integer.parseInt(tokens[0]), tokens[1],tokens[2]));
                }
                pautaT = pautaS;
            }
            finally {
                s.close();
            }
        }
        catch (FileNotFoundException e){
            e.printStackTrace();
        }

    }

这会导致列表被填充。

【讨论】:

    【解决方案2】:

    你可以使用 StringTokenizer 并将同一行的每个标记保存到一个变量中,然后根据需要使用它们。

    【讨论】:

      猜你喜欢
      • 2023-02-22
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多