Sustitución de carárter "?"

Ra?
19 de Febrero del 2010
Buenos días, tengo que realizar una sustitución en una cadena de la subcadena "?" por otra cadena de varios caracteres. Para ello estoy empleando el comando replaceFirst (de la fomra: cad.replaceFirst("?", obj.toString());), pero me aparece el error:
java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0

¿alguien sabe cómo debo realizar esa sustitución?

MUCHAS GRACIAS

kalua66
19 de Febrero del 2010
Hola raul...podria poner un poco mas de tu codigo...

Y suelo utilizar el metodo replaceAll, pero vamos que son parecidos...

Y aver xk te pa ese error...

Ra?
19 de Febrero del 2010
Buenas tardes,

en realidad se trata de una función que lo que hace es sustituir campos,. por ejemplo la cadena de entrada es: "El usuario ? debe ?" debe devolver: "El usuario Pedro debe cerrar sesión"

Pero al hacer el replaceFirst, me da el error. La función en sí es:
private String parse(String cad, Object[] objs){
for (Object obj:objs){
cad.replaceFirst("?", obj.toString();
}
return cad;
}

Muchas gracias

kalua66
19 de Febrero del 2010
Aver...

cuando remplazas...yo lo que ago es:
String cadena="Hola";
cadena=cadena.replaceAll("a","o");
para que guarde lo reemplazdo en la variable...

y en cuento al lo del for no lo entiendo...si me explicas..ke es lo object : objs??

Un saludo!

Ra?
19 de Febrero del 2010
Buenas tardes,

la forma de reemplazar es justamente la que indicas, y funciona casi siempre, el problema es cuando se indica como subcadena a sustituir la interrogación, en ese caso deja de funcionar.

Lo de Object[ ] objs es porque el método acepta como parámetro de entrada cuanquier tipo, ya sea String, Long, Integer, Boolan... pero luego lo convierte a cadena para devolver la correspondiente.

Muchas gracias por tu interés y ayuda

kalua66
19 de Febrero del 2010
y lo de guardar la variable, porque la reemplazas pero no la guardas ne ninguna lao eso no sera y que te tire el error por algun otro lao??

Denada yo intento ayudar...

kalua66
19 de Febrero del 2010
o alo mejor la letra ? es un carectar reservado prueba con otra...

kalua66
19 de Febrero del 2010
parece cansino pero viendo otros codigos ke tengo en uno utilizo el replazeFirst....

y no se si sera por algo o no pero tengo la variable asi

cadena.replaceFirst(“[?]“,"donde");

dime si te valio o algo??

Ra?
19 de Febrero del 2010
Buenos días,

tranquilo que no cansas, eso que apuntas, ya lo probé y no funciona tampoco, es como si no hiciese nada.

Muchas gracias por tu ayuda :S

raul
19 de Febrero del 2010
Buenos días, ya encontré la solución, consiste en definir unos métodos que actúan en lugar de los replace de java para caracteres especiales:

private String replaceAllString(String strOrig, String strFind, String strReplace) {
if(strOrig == null) {
return null;
}
StringBuffer sb = new StringBuffer(strOrig);
String toReplace = "";
if (strReplace == null) toReplace = "";
else toReplace = strReplace;

int pos = strOrig.length();
while (pos > -1) {
pos = strOrig.lastIndexOf(strFind, pos);
if (pos > -1) sb.replace(pos, pos+strFind.length(), toReplace);
pos = pos - strFind.length();
}
return sb.toString();
}

private String replaceFirstString(String strOrig, String strFind, String strReplace) {
if(strOrig == null) {
return null;
}
StringBuffer sb = new StringBuffer(strOrig);
String toReplace = "";
if (strReplace == null) toReplace = "";
else toReplace = strReplace;

int pos = strOrig.length();
while (pos > -1) {
pos = strOrig.lastIndexOf(strFind, pos);
if (pos > -1) {
sb.replace(pos, pos+strFind.length(), toReplace);
return sb.toString();
}
pos = pos - strFind.length();
}
return sb.toString();
}