2012-05-24 6 views
3

je tente de rechercher le fichier avec un nom comme: ENV20120517 tout ce que vous et ce fini par .DATTrouver fichier avec un motif

donc je HASARD à: «ENV20120517 * * DAT ».

public boolean accept(File dir, String name) { 
    if (pattern != null) { 
     return name.matches(pattern); 
    } 
    return false; 
} 

Pourquoi avec le modèle précédent, je reçois vrai pour: name = "ENV20120516053518.DAT"?

Répondre

4

String.matches() prend un regular expression, et non un glob pattern.

Il se trouve que ENV20120517*.*DAT est une regex valide. Il a, cependant, une signification différente de ce que vous attendez: il correspond à n'importe quelle chaîne qui commence par ENV2012051 et se termine par DAT (le .* correspond à n'importe quoi, et le 7* est effectivement un no-op).

La regex suivante est équivalente au modèle dans votre question ENV20120517.*[.].*DAT

Pour quelques idées sur la façon de faire de la correspondance glob en Java, voir Is there an equivalent of java.util.regex for "glob" type patterns?

+0

'DAT' doit être à la fin:' matchs de Java (...) 'Valider la chaîne d'entrée entière. –

+0

Cette réponse pourrait aider beaucoup de gens qui ne sont pas au courant de la fonctionnalité de 'String.matches()'. +1 – brimborium

+0

@BartKiers: Vous avez raison, merci de l'avoir signalé. Réponse mise à jour – NPE

0

Le parttern doit être "ENV20120517.*DAT", parce "ENV20120517*.*DAT", le premier * correspond à 0 ou plus 7 char, donc "ENV20120516053518.DAT".matches("ENV20120517*.*DAT") est vrai.

+0

si je mets: ENV20120517. * DAT, il n'y a pas de fichier trouvé –

+0

vous exécutez: String pattern = "ENV20120517. * DAT"; \t \t for (int i = 100000; i <1000000; i ++) { \t \t \t chaîne filename = "ENV20120517" + i + "DAT"; \t \t \t si { \t \t \t \t System.out.println (fileName + "ne correspond pas à motif:" \t \t \t \t \t \t + motif) (fileName.matches (motif)!); \t \t \t} \t \t} –

0

Essayez

pattern = "ENV20120517.*\\.DAT" 

Ou plus strictement:

pattern = "^ENV20120517.*\\.DAT$" 
Questions connexes