duda expresiones regulares

buenas
a ver, tengo un string con un texto y quiero ke dada una palabra mire a ver si esta en dicho texto y lo ponga en negrita( que le meta los tag ), hasta ahora lo habia hecho con string.replaceAll(patron,nuevopatron); y me habia ido bien pq las palabras que buscaba no se encontraban metidas en otras palabras.

pero por ejemplo con la palabra 'abra' en la frase
Me da la palabra de ke cdo abra la puerta no entrara la cabra.
con el replaceAll("abra","abra) me da este resultado

Me da la palabra de ke cdo abra la puerta no entrara la cabra .

y yo lo ke kiero es esto:
Me da la palabra de ke cdo abra la puerta no entrara la cabra.

Entonces lo intente con expresiones regulares y tengo este codigo:
Pattern patron = Pattern.compile("[^\\w]abra[^\\w]");
Matcher encaja = patron.matcher("Me da la palabra de ke cdo abra la puerta no entrara la cabra.");

String resultado = encaja.replaceAll("abra");
out.println(resultado);


para que solo me reemplace cdo sea la palabra exacta, pero con este codigo me sale lo siguiente:
Me da la palabra de ke cdoabrala puerta no entrara la cabra.

se me come los espacios, lo cual despues de unas cuantas palabras en hebreo vi ke es lo logico y lo normal, ahora la pregunta es: como demonios lo puedo hacer para ke simplemente donde ponga abra lo cambie por abra

gracias por adelantado
Q verguenza¡¡ Q no se entere tu jefe q andas haciendo estas preguntas porque te finikita en 0'
efi escribió:Pattern patron = Pattern.compile("[^\\w]abra[^\\w]");
Matcher encaja = patron.matcher("Me da la palabra de ke cdo abra la puerta no entrara la cabra.");

String resultado = encaja.replaceAll("abra");
out.println(resultado);

[...]
se me come los espacios, lo cual despues de unas cuantas palabras en hebreo vi ke es lo logico y lo normal, ahora la pregunta es: como demonios lo puedo hacer para ke simplemente donde ponga abra lo cambie por abra

Prueba el método chapuza :P y cambia

String resultado = encaja.replaceAll("abra");

por

String resultado = encaja.replaceAll(" abra ");

Y observa que hay un espacio antes de y después de

Es un poco bastante ñapa pero igual te vale

Un saludo
RaUleX escribió:Prueba el método chapuza :P y cambia

String resultado = encaja.replaceAll("abra");

por

String resultado = encaja.replaceAll(" abra ");

Y observa que hay un espacio antes de y después de

Es un poco bastante ñapa pero igual te vale

Un saludo


no me vale, pq en vez de un espacio puede haber un . una , un; etc etc
pero gracias de todos modos.

EDITO:bueno, al final me he currao este codigo ke parece ke funciona, aunke no uso expresiones regulares. Lo pongo por si a alguien le sirve.

int indexPatron=0;
int auxIndex=0;
boolean negrita=true;
String patron="abra";
String texto="Me da la palabra de ke cdo abra la puerta no entrara la abra";
String nuevoTexto="";
String nuevoTexto2="";
while((indexPatron=texto.indexOf(patron,indexPatron))!=-1){
negrita=true;
if(indexPatron!=0){
if( (Character.getNumericValue(texto.charAt(indexPatron-1))>=10) &&(Character.getNumericValue(texto.charAt(indexPatron-1))<=35))
negrita=false;
}
if(negrita){
if ( (indexPatron)+patron.length()!=texto.length())
if( (Character.getNumericValue(texto.charAt(indexPatron+patron.length()))>=10) &&(Character.getNumericValue(texto.charAt(indexPatron+patron.length()))<=35))
negrita=false;

}
nuevoTexto+=texto.substring(auxIndex,indexPatron);

if(negrita)
nuevoTexto+=""+patron+"";
else nuevoTexto+=patron;
auxIndex=indexPatron+patron.length();
indexPatron=indexPatron+patron.length();
}
nuevoTexto+=texto.substring(auxIndex,texto.length());

patron=Character.toUpperCase(patron.charAt(0))+patron.substring(1,patron.length());
auxIndex=0;

while((indexPatron=nuevoTexto.indexOf(patron,indexPatron))!=-1){
negrita=true;
if(indexPatron!=0){
//out.println(Character.getNumericValue(texto.charAt(indexPatron-1)));
if( (Character.getNumericValue(nuevoTexto.charAt(indexPatron-1))>=10) &&(Character.getNumericValue(nuevoTexto.charAt(indexPatron-1))<=35))
negrita=false;
}

if(negrita){
if ( (indexPatron)+patron.length()!=nuevoTexto.length())
if( (Character.getNumericValue(nuevoTexto.charAt(indexPatron+patron.length()))>=10) &&(Character.getNumericValue(nuevoTexto.charAt(indexPatron+patron.length()))<=35))
negrita=false;
}
nuevoTexto2+=nuevoTexto.substring(auxIndex,indexPatron);

if(negrita)
nuevoTexto2+=""+patron+"";
else nuevoTexto2+=patron;
auxIndex=indexPatron+patron.length();
indexPatron=indexPatron+patron.length();
}
nuevoTexto2+=nuevoTexto.substring(auxIndex,nuevoTexto.length());
out.println(nuevoTexto2);
efi escribió:no me vale, pq en vez de un espacio puede haber un . una , un; etc etc
pero gracias de todos modos.

Por eso te dije que era un método chapuza XD.

Si algún dia otro tiene el mismo problema ya tiene la solución. Cacho código te has currado :)

Un saludo
4 respuestas