【问题标题】:Need help testing tokens against errors需要帮助测试令牌以防止错误
【发布时间】: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


【解决方案1】:

看来您首先必须按字段对代码进行分组。根据格式,您可能会使用简单的split() 而不是标记器。

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

您可以调整代码的第二部分以打印错误代码。

【讨论】:

  • 我理解这个概念,但我不确定代码的外观。你能写一个小例子吗?我对 java 还很陌生。
猜你喜欢
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 2022-01-03
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
相关资源
最近更新 更多