【发布时间】:2016-08-18 13:21:30
【问题描述】:
我必须编写一个程序来读取文本文件并检查每行的 8 条数据是否符合某些标准。我得到了正确读取文本文件的程序,并且我实现了一个标记器将文本文件数据拆分为 8 个单独的标记。我需要找到一种好方法来测试令牌以防止可能出现的错误。有什么简单的方法可以做到这一点?这是错误列表。
代码错误
发票代码太短
B 发票代码没有正确的字符
C 发票代码位数全为零
D 名称字段少于两个字
E 名称字段超过四个字
F 名称字段没有逗号
G 名称字段的标题错误
H 名称字段的首字母不正确
我的售价没有小数点
J 售价多于一位小数
K 售价前导零
L 类型有错误符号(包含大写字母或包含符号)
M 订单日期不是六个字符
N 订单日期不全是数字
P 订单日期不是合法日期
Q 发货日期不是六个字符
T 发货日期不是全数字
U 发货日期不是法定日期
V 未分类错误
每个字段最多可以有一个错误。因此,每条记录最多可能有六个错误。应按照上述错误列出的顺序检查每个字段是否有错误。INVOICE CODE 正好 6 个字符
客户名称最多 30 个字符
销售价格最多 8 个字符
GENRE 最多 10 个字符
ORDER DATE 正好 6 个字符
SHIPPING DATE 正好 6 个字符
这些字段用分号分隔。
发票代码应该是三个大写字母后跟三位数字,其中至少一位不为零。
客户名称的格式应为姓氏后跟逗号,然后是可选的标题、名字和可选的中间名首字母。头衔必须是 Mr.、Mrs.、Dr.、Miss 或 Ms 之一。中间名首字母必须是大写字母,后跟句点。单词应该用一个空格分隔。
销售价格在小数点左侧有两位小数。价格不应有前导零。
流派只能包含小写字母。
这两个日期应该是 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();
}
}
【问题讨论】:
-
你应该学习如何使用 RegEx。
-
你能发一份样本记录吗?
-
您需要更详细地了解(也许您已经知道,那很好)字段和要求。例如,对于代码 A,您需要知道哪个字段是发票代码以及最小长度是多少。具体来说,代码 V 看起来很神秘——也许您不需要使用它,或者如果您发现不属于其他代码的错误,您可以使用它。
-
对不起,是的,我知道错误代码的参数,我会包括他们
标签: java token stringtokenizer