2012-04-24 28 views
9

No se encontró nada específico a mi problema en las búsquedas:Regex: número impar de veces que aparece un char

tengo un alfabeto {a, b, c}, donde necesito para producir un conjunto de cadenas que tienen un extraño numero de a's

Válido: ababaccccc cabina baaaccccc caabaaac

inválida: baac caabbbaac caacccb

Intento:

\b[bc]*a{3}[bc]*\b pero esto es muy limitada.

Respuesta

8

La siguiente expresión regular should work.

\b[bc]*a(([bc]*a){2})*[bc]*\b 
+0

¿Cuáles son los 'B' de \ para? – CodyBugstein

+1

@Imray \ b significa límite de palabra. – mentics

2

Si necesita solución sin expresiones regulares es decir, Java:

String arr[] = {"ababaccccc", "baaaccccc" , "caabaaac", "baac", "caacccb", "caabbbaac"}; 

for (String string : arr) { 
      int counter = 0; 
      for (int i = 0; i < string.length(); i++) { 
       if (string.charAt(i) == 'a') { 
        counter++; 
       } 
      } 
      if ((counter & 1) == 0) { 
       System.out.println(string + " is invalid"); 
      } else { 
       System.out.println(string + " is valid"); 
      } 
     } 
+0

por qué no tener una variable booleana llamada válida, que comienza como falsa y cambia de estado cada vez que encontramos el carácter 'a': String arr [] = {"ababaccccc", "baaaccccc", "caabaaac", "baac", "caacccb", "caabbbaac"}; para (String cadena: arr) { bool válido = false; for (int i = 0; i

0

¿No sería más fácil de

  1. dividir la cadena de entrada en el espacio en blanco
  2. contar el ' a's en cada elemento
  3. basado en el resultado del conteo ¿aceptar o rechazar?
Cuestiones relacionadas