2017-07-14 6 views
-1

Meine Validierung eine Regex mit folgenden Anforderung benötigen:Regex dafür, dass die Dateierweiterung nur einmal

  1. Die Dateierweiterung sollte nur einmal erscheinen z.B.
    • myfile.pdf (gültig)
    • myfile.pdf.pdf (ungültig)
  2. Gültige Dateierweiterungen sind pdf, doc, docx:
    • myfile.pdf (gültig)
    • myfile.doc (gültig)
    • myfile.txt (ungültig)

Könnten Sie mir bitte mit dem regulären Ausdruck in Java helfen.

+0

Würde etwas wie myFile.txt.pdf übereinstimmen? Es hat zwei Erweiterungen, aber nur eine ist gültig. – Sweeper

+2

Was hast du probiert? Wo ist das scheitern? Wir sind kein Code-Writing-Service. Bitte lesen Sie die [Hilfe], um Anleitungen zum Stellen von Fragen zu erhalten. –

+0

Ja, myFile.txt.pdf würde übereinstimmen. – user868888

Antwort

0

Ich würde vorschlagen, die Anforderungen getrennt zu überprüfen. Beispiel:

public static void main(String[] args) throws Exception { 
    String [] fileNames = {"myfile.pdf","myfile.pdf.pdf","myfile.doc","myfile.txt","myfile.txt.doc"};   
    for(String fileName : fileNames){ 
     boolean valid = hasValidExtension(fileName) && noDuplicates(fileName); 
     System.out.println(fileName+"\t" + (valid?"Valid":"Invalid")); 
    } 
} 

public static boolean hasValidExtension(String fileName){ 
    String ext = fileName.split("\\.(?=[^\\.]+$)")[1]; 
    if(ext.equals("pdf")||ext.equals("doc")||ext.equals("docx")){ 
     return true; 
    } 
    return false; 
} 

public static boolean noDuplicates(String fileName){ 
    String[] splited = fileName.split("\\."); 
    Set<String> set = new HashSet<>(); 
    for (String str : splited) { 
     if (set.add(str) == false) { 
      return false; 
     } 
    } 
    return true; 
}