2012-02-03 5 views
2

J'essaie de générer une correspondance d'expression régulière en Java, qui accepte tous les nombres contenant 3 et 7 (dans n'importe quel ordre, ie il devrait y en avoir au moins 7 pour tous les 3 et vice versa) sur l'ensemble des entiers. Jusqu'à présent, j'ai écrit le code ci-dessous, mais je ne suis pas en mesure d'obtenir la bonne sortie. Toute aide sera appréciée:Expressions régulières correspondant en Java

class Main { 
    public static void main (String[] args) throws java.lang.Exception { 
    System.out.println("333333".matches("[[3][7]+]*") ? "Yes" : "No"); 
    } 
} 

Ici, je devrais obtenir la sortie comme NO, puisque la chaîne est seulement 3 n'est pas de 3 et au moins un 7.

+1

Je suis désolé, mais c'est un module d'une autre tâche, qui doit être utilisée. Pour une personne non informaticienne, Java est facile à coder, donc je voudrais m'en tenir à regex. – hytriutucx

+0

@Lucifer: terminé! – hytriutucx

Répondre

2

Je suis pas sûr si une regex est nécessaire. Pourquoi ne pas utiliser ce qui suit:

public static boolean containsDigit(int n, int digit) { 
    return String.valueOf(n).contains(String.valueOf(digit)); 
} 

... 

int n = 333333; 
boolean nContains3And7 = containsDigit(n, 3) && containsDigit(n, 7); 
0

^(\d*3\d*7\d*)|(\d*7\d*3\d*)$ Je pense.

1

D'après votre description, cela devrait être suffisant:

String input = "333333"; 
// Input string contains both a 3 and a 7. 
System.out.println(((input.indexOf("3") > -1) && (input.indexOf("7") > -1)) ? "Yes" : "No"); 

Puisqu'un regex examine une séquence de caractères, cet exercice devient inutilement compliqué.