2017-02-02 2 views
0

Ich habe eine Textdatei und ich muss überprüfen, ob sie korrekt ist. Die Datei sollte vom folgenden Typ sein:Wie überprüft man, ob eine Zeichenfolge in einer Textdatei korrekt ist

XYab 
XYab 
XYab 

Wo X, Y, a, b nur einen bestimmten Wertebereich annehmen können. Zum Beispiel muss b ein Wert zwischen 1 und 8 sein. Diese Werte werden durch 4 enum definiert (1 enum für X, 1 enum für Y, etc ..). Das einzige, was mir in den Sinn kam, ist so etwas wie dieses:

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

Aber natürlich überprüft er nur die erste Zeile der Datei. Irgendwelche Ratschläge, wie ich alle Dateizeilen überprüfen kann?

+0

Alle Zeilen haben nur eine Sequenz von XYab? oder kann mehrere Male durch die Linie sein – cralfaro

+0

Eine Zeile kann nur eine Sequenz von XYab haben – Simone94

+0

sollten Sie Regex versuchen. –

Antwort

0

Man könnte so etwas wie diese versuchen, (ändern Sie es entsprechend Ihrem Aufzählungen)

@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

nicht über Kollision Vergessen Sie aber, wenn Sie die Nummer oder Zeichenfolge haben, können Sie den regulären Ausdruck verwenden, das zu tun.

Auf jeder Enum müssen Sie eine Funktion regexp wie folgt tun. Sie können stattdessen einen externen Helper verwenden.

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; 
} 
Verwandte Themen