2016-08-18 80 views
-4

我必须制作一个程序来读取文本文件,并检查每条线上的8条数据是否符合某些标准。我得到了正确读取文本文件的程序,并且我实现了一个标记器来将文本文件数据分成8个独立的标记。我需要找到一种测试令牌以防止可能的错误的好方法。任何简单的方法来做到这一点?这里是错误列表。需要帮助测试令牌以防止出现错误

CODE ERROR

甲发票代码太短

乙发票代码不具有正确的字符

Ç发票代码数位都是零

d名称字段具有比更少两个字

E名称字段有四个以上的字

F名称字段没有逗号

摹名称字段中有一个坏的标题

^h名称字段有一个不好的初始

我销售价格没有小数点

Ĵ销售价格有更多的不止一个小数点

ķ销售价格有一个前导零

大号体裁有坏小号ymbols(包含大写字母或包含符号)

M阶日期不是六个字符

n阶的日期是不是所有的数字

p th级的日期是不是一个合法的日期

Q运输日期不是六个字符

牛逼发货日期是不是所有的数字

ü发货日期是不是一个合法的日期

V未分类错误

每个字段最多可能有一个错误。因此,每条记录最多可能有6个错误。每个字段应当进行错误检查的顺序,上述误差listed.INVOICE CODE恰好6个字符

客户名称最多30个字符

销售价格最多8个字符

GENRE最多10个字符

订单日期恰好6个字符

出货日期恰好6个字符

这些字段用分号分隔。

发票代码应该是三个大写字母后跟三个数字,其中至少有一个数字不为零。

客户姓名的格式应该是姓氏后跟逗号,然后是可选的标题,名字和可选的中间首字母。标题必须是先生,夫人,博士,小姐或女士之一。中间首字母缩写必须是大写字母,后跟一个句点。这些词应该由一个空格分隔。

销售价格在小数点左边有两位十进制数字。价格应该没有领先的零。

该流派应该只包含小写字母。

这两个日期应该是MMDDYY格式,其中所有六个字符都是数字。

日期必须是法定日期。订单日期/装运日期可能不会在今天的日期之后。

这里是我的全码:

package Project3; 

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.StringTokenizer; 

public class Main { 

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

BufferedReader in = new BufferedReader(new FileReader("movie.dat")); 
String line; 
String token; 
String delimiter = ";"; 
StringTokenizer tokenizer; 


while((line = in.readLine()) != null){ 
    tokenizer = new StringTokenizer(line, delimiter); 

    while (tokenizer.hasMoreTokens()){ 
     token = tokenizer.nextToken(); 
     System.out.print("Invoice Code: "+token+" "); 
     if(token.length() == 6){ 
     } 
      else{ 
      System.out.println("A"); 
      } 
     if() 
     token = tokenizer.nextToken(); 
     System.out.print("Customer Name: "+token+" "); 
     token = tokenizer.nextToken(); 
     System.out.print("Sale Price: "+token+" "); 
     token = tokenizer.nextToken(); 
     System.out.print("Genre: "+token+" "); 
     token = tokenizer.nextToken(); 
     System.out.print("Order Date: "+token+" "); 
     token = tokenizer.nextToken(); 
     System.out.print("Shipping Date: "+token+" "); 
     } 
    System.out.println(); 
    } 


in.close(); 
} 

}

+0

您应该学习如何使用RegEx。 – Blobonat

+0

您可以发布样本记录吗? –

+0

您需要更详细地了解(也许您已经知道,然后很好)字段和要求。例如,对于代码A,您需要知道哪个字段是发票代码以及最小长度是多少。特别是代码V看起来像一个谜 - 也许你不需要使用它,或者如果你发现不属于其他代码的错误,你也可以使用它。 –

回答

0

看起来你首先要组代码的领域。根据格式的不同,您可能会使用简单的split()而不是标记器。

为了简单起见,我会在每个字段检查的类中创建一个方法。 然后,在相应的方法中,您需要解析它(通过正则表达式)并生成错误代码(如果有的话)。该方法将返回错误代码或没有任何内容(您将不得不定义什么什么意味着给你)。

您可以修改代码的第二部分来打印错误代码。

+0

我理解这个概念,但我不确定代码的外观。你能写一个小例子吗?我对Java相当陌生。 –