使用java.util.scanner读取和解析文件

时间:2013-11-06 11:54:19

标签: java java.util.scanner

我有一个文本文件,我想用java.util.Scanner阅读并解析内容。

  

文件看起来像这样:
  
  物体数量:5
  描述0一些描述
  :描述1一些描述
  :对象1的更多描述   :对象1的更多描述   :对象1的更多描述   描述2对象2的一些描述   :对象2的更多描述   描述3对象3的一些描述   :对象3的更多描述   描述4对象4的一些描述   :对象4的更多描述

我到目前为止已经有了这个

  String pattern = "description";
  String pattern2 = ":";
  int romNummer = 0;
  fil = new Scanner(new File(filnavn));
  do{
      String input;
      input = fil.next();
      romNummer = fil.nextInt();
      String description = fil.nextLine();

      if(fil.hasNext(":")){
          input = fil.next();
          String description2 = fil.nextLine();
          description += description2;
      }
      if(fil.hasNext(":")){
          input = fil.next();
          String description2 = fil.nextLine();
          description2 += description2;
      }
      if(fil.hasNext(":")){
          input = fil.next();
          String description2 = fil.nextLine();
          description += description2;
      }

  }while (fil.hasNext(pattern)||fil.hasNext(pattern2));

我希望将一个对象的所有描述都作为一个字符串。使用扫描仪类有更优雅的方法吗?

2 个答案:

答案 0 :(得分:1)

为什么不读取每一行然后判断它是否是新描述,或者第一个字符是否为“:”它是否要附加到当前描述中?

答案 1 :(得分:0)

伪代码

fil = new Scanner(new File(filnavn));
String line = "",result="";
int number=0;
number = Integer.parseInt(fil.nextLine().split(":").[1].trim()); 
while(fil.hasNext())
{ 
    line = fil.nextLine();

    Check if line starts with "Description"
    {
         Print content
         remove "Description [number]" from line
         content += line;
    }
    Check if line starts with ":"
    {
         remove ":"
         content += line;
    }
}