2011-02-25 17 views
7

Quiero encontrar las palabras que comienzan con un signo "#" en una cadena en java. También puede haber espacios entre el signo y la palabra.Encontrar las palabras comenzar desde un carácter especial java

La cadena "hi #how are # you" dará la salida como:

how 
you 

He intentado esto con expresiones regulares, pero aún así no pudo encontrar un patrón adecuado. Por favor ayúdame con esto.

Gracias.

Respuesta

10

Usa #\s*(\w+) como tu expresión regular.

String yourString = "hi #how are # you"; 
Matcher matcher = Pattern.compile("#\\s*(\\w+)").matcher(yourString); 
while (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

Esto imprimirá:

how 
you 
+0

Gracias por la ayuda ide, joe y knutson. Funciona. También quiero obtener todas las palabras que aparecen después del último signo #. 'por ejemplo: "hola #cómo están # lo que estás haciendo" debería dar la salida de la forma en que lo haces' ¿hay alguna forma de lograr esto? – gishara

+0

Esa es una pregunta diferente y si bien puedes resolverla con una expresión regular ('Pattern.compile (" # \\ s * ([^ #] + $ | \\ w +) ")'), podría ser confuso ... – ide

+0

Muchas gracias por la ayuda. Eso era lo que quería. :) – gishara

0

Prueba esta expresión:

# *(\w+) 

Esto dice, partido # y luego coincide con 0 o más espacios y 1 o más letras

+0

¿por qué es el espacio en una clase de caracteres? – NullUserException

+0

yo estaba pensando en mí mismo, thx – Joe

0

creo que puede ser el mejor fuera utilizando el método de división de la cadena (mystring.split ('')) y tratar los dos casos por separado. Regex puede ser difícil de mantener y leer si va a tener varias personas actualizando el código.

if (word.charAt(0) == '#') { 
    if (word.length() == 1) { 
    // use next word 
    } else { 
    // just use current word without the # 
    } 
} 
0

Aquí es un enfoque expresiones no regulares ...

  1. reemplazar todas las apariciones de un # seguido de un espacio en su cadena con a #

    myString.replaceAll ("\ s #", "#")

  2. ahora dividido la cadena en tokens usando el espacio como su carácter delimitado

    String [] = myString.split palabras (" ")

  3. Finalmente iterar sobre sus palabras y comprobar si el personaje principal

    word.startsWith ("#")

-1
 String mSentence = "The quick brown fox jumped over the lazy dog."; 

     int juIndex = mSentence.indexOf("ju"); 
     System.out.println("position of jumped= "+juIndex); 
     System.out.println(mSentence.substring(juIndex, juIndex+15)); 

     output : jumped over the 
     its working code...enjoy:) 
Cuestiones relacionadas