2017-02-02 13 views
0

テキストファイルがあり、それが正しいかどうかを確認する必要があります。ファイルは次のタイプである必要があります。テキストファイルの文字列が正しいかどうかを確認する方法

XYab 
XYab 
XYab 

ここで、X、Y、a、bは一定の範囲の値しか取ることができません。たとえば、bは1〜8の値でなければなりません。これらの値は、4つの列挙型(1つの列挙型X、1つの列挙型Yなど)によって定義されます。私の心に来た唯一の事は次のようなものです:

BufferedReader br = new BufferedReader(new FileReader(FILENAME) 
String s; 
while ((s = br.readLine()) != null) { 
    if(s.charAt(0)==Enum.example.asChar()) 
} 

もちろん、ファイルの最初の行だけをチェックします。すべてのファイルの行をチェックする方法についてのアドバイスはありますか?あなたはこのような何かを試みることができる

+0

すべての行には1つのXYabシーケンスがありますか?または行で複数回指定することができます – cralfaro

+0

1行にはXYabのシーケンスが1つしかありません – Simone94

+0

正規表現を試してください。 –

答えて

0

、(あなたの列挙型に応じて変更)

@Test 
public void findDates() { 
     File file = new File("pathToFile"); 
     try{ 
      Assert.assertTrue(validateFile(file)); 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 

    private boolean validateFile(File file) throws IOException { 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     String line; 
     // add yours enumns to one list 
     List<Enum> enums = new ArrayList<>(); 
     enums.add(EnumX); 
     enums.add(EnumY); 
     enums.add(EnumA); 
     enums.add(EnumB); 

     while ((line = br.readLine()) != null) { 
      // process the line. 
      if(line.length() > 4){ 
       return false; 
      } 
      //for each position check if the value is valid for the enum 
      for(int i = 0; i < 4; i++){ 
       if(enums.get(i)).valueOf(line.charAt(i)) == null){ 
        return false; 
       } 
      } 
     } 
     return true; 
    } 
0

は、衝突を忘れないでいますが、数値や文字列を持っている場合、あなたはそれを行うために正規表現を使用することができます。

各列挙型で、このような正規表現を実行する必要があります。代わりに外部ヘルパーを使用できます。

enum EnumX { 
    A,B,C,D, ...; 
    ... 
    // you enum start to 0 
    public static String regexp(){ 
     return "[0-" + EnumX.values().length +"]"; 
    } 
} 

// it is working also if you have string in your file 
enum EnumY{ 
    A("toto"),B("titi"),C("tata"),D("loto"); 

    public static String regexp(){ 
     StringBuilder regexp = new StringBuilder("["); 
     for(EnumY value : EnumY.values()){ 
       regexp.append(value).append(","); 
     } 
     regexp.replace(regexp.length()-1, regexp.length(), "]"); 
     return regexp.toString(); 
    } 
} 

public boolean isCorrect(File file){ 
     // build the regexp   
     String regexp = EnumX.regexp() + EnumY.regexp() + EnumA.regexp() +EnumB.regexp(); 

     // read the file 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     String line; 

     while ((line = br.readLine()) != null) { 
      if (line.matches(regexp) == false){ 
       // this line is not correct 
       return false; 
      } 
     } 
     return true; 
} 
関連する問題