2012-05-19 22 views
20

Estoy tratando de eliminar una palabra específica de una determinada cadena con la función replace() o replaceAll(), pero estas eliminan todas las apariciones de esta palabra, incluso si es parte de otra palabra!Eliminar una palabra específica de una cadena

Ejemplo:

String content = "is not like is, but mistakes are common"; 
content = content.replace("is", ""); 

de salida:"not like , but mtakes are common"

salida deseada:"not like , but mistakes are common"

¿Cómo puedo sustituir sólo palabras completas a partir de una cadena?

+0

si tiene la etiqueta Java, por supuesto ** Esto está en Java ** –

+0

¿Está obligado a utilizar reemplazar? Con una cuerda? ¿Tienes que buscar diferentes cadenas para reemplazar desde y hacia? – UNECS

+0

debe agregar en qué parte de toda la cadena que desea reemplazar, tal vez puede usar una expresión regular para hacer el trabajo –

Respuesta

36

¿Qué diablos,

String regex = "\\s*\\bis\\b\\s*"; 
content = content.replaceAll(regex, ""); 

Recuerde que necesita para utilizar replaceAll(...) utilizar expresiones regulares, no replace(...)

  • \\b le da la palabra límites
  • \\s* SOP encima de cualquier blanco espacio en cualquier lado de la palabra que se elimina (si desea eliminar esto también).
+0

muchas gracias que lo hicieron =) –

+1

@MiDoBasha: de nada –

+0

Todavía queda un problema. Si la frase fue 'perro es gato', este código elimina el espacio de ambos lados de la palabra 'es' y lo convierte en 'perra'. Creo que es mejor escribir 'content = content.replaceAll (regex," ")' y luego recortar los espacios en los extremos – Jasir

0

Puede intentar reemplazar "es" por "". El es con un espacio antes y uno después, reemplazado por un espacio simple.

Actualización:

para hacer que funcione para la primera "es" en la oración, también lo hacen a otro de reemplazo de "es" para "". Reemplazar el primero es y el primer espacio, con una cadena vacía.

+1

no funcionará para el primer "es" en la oración. –

+0

Dado que es posible que tenga que manejar ese caso especialmente debido a la letra mayúscula, quizás varias llamadas 'replaceAll()' funcionarían? Incluyendo un 'replaceAll (" es \. ",". ");' O somesuch para capturar el último ... –

+1

Ambos tienen razón. Gracias. He actualizado la respuesta para incluir ese caso. Si la cadena terminaría en "es", también debería agregarse ese caso, sumando un total de 3. Además, al igual que Rob, las mayúsculas también deberían contemplarse en las llamadas adicionales de replaceAll. –

5

content = content.replaceAll("\\Wis\\W|^is\\W|\\Wis$", "");

+0

¿no necesita 'replaceAll (...)' not 'replace (...)' para usar la magia de las expresiones regulares? –

+0

@HovercraftFullOfEels Lo siento, no he probado. Editado después de la prueba. :) – Chip

Cuestiones relacionadas