2016-08-18 77 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相當陌生。 –