如何验证文本文件的内容?

时间:2014-11-02 19:02:09

标签: java validation count stdout

我需要一些程序的帮助,该程序必须读入指定的文本文件,然后验证其内容。每个有效匹配的结果应按以下格式输出到控制台(stdout):

HomeTeamName [HomeTeamScore] | AwayTeamName [AwayTeamScore]

在输出结束时,我需要生成统计信息,显示已处理的有效和无效匹配的总数。我还需要它来显示得分的目标总数。

到目前为止我的代码是:

public class Generator {

public static void main(String[] args) throws FileNotFoundException {


    Scanner s = new Scanner(new File("results.txt"));   

    String line;

    while ( s.hasNext() ) {
        line = s.nextLine();    
        System.out.println(line);

    }

    System.out.println("\nEOF");    // Output and End Of File message.

}

}

示例输入文件为:

阿斯顿维拉:米德尔斯堡:3:1
切尔西:曼城:1 //只提供3个场地 托特纳姆热刺:斯托克城:0:0
赫尔:: 2:3 //丢失球队名称 西汉姆联队:维冈竞技:2:1
:: 2:0 //队友名字丢失了 富勒姆:利物浦:1:2
阿森纳利物浦队:2:2 //队员之间缺少分界符() 桑德兰:纽卡斯尔联队:0:4
赫尔:利物浦:5:x //'x'代替客场球队得分

1 个答案:

答案 0 :(得分:1)

使用java.util.regex.Pattern似乎很容易。只需为有效的记录格式构建一个正则表达式模式。然后为您阅读的每一行创建一个匹配器,看它是否匹配。如果是,则输出该行。

像(伪java代码):

Pattern pattern = Pattern.compile("your regular expression here");
while((line = readLine()) != null) {
   Matcher m = pattern.matcher(line);
   if (m.matches()) {
      System.out.println(line + " is good");
   } else {
      System.out.println(line + " is not good");
   } 
}

没有正则表达式的选项:

while((line = readLine()) != null) {
   String[] values = line.split(":");
   if (values.length != 4) {
       System.out.println("bad line: " + line);
   }
   // check for empty fields like:
   if (values[0].isEmpty()) {/* error message */}
   // check for proper numeric values like:
   try {
       // prob need to remove leading whitespace as well...
       Integer.parseInt(values[2].trim());
   } catch (NumberFormatException e) {/* error message */}
   // etc...
}

鉴于上述两者之间的选择,我会使用表达式。它比通过一堆if / else代码更具表现力。还有像BeanIO这样的库可以为你做很多这样的事情。