2009-11-02 21 views
32

quiero reemplazar la última cadena que es un , con )Reemplazar última parte de la cadena de

Supongamos que la cadena es:

Insertar en dual (nombre, fecha,

para convertirse a:

Insertar en dual (nombre, fecha)

+3

¿Ha considerado reescribir su ciclo para que aparezca la cantidad correcta de comas? He visto una pregunta de Stackoverflow para que ese lazo sea lo más eficiente posible. –

+0

Simplemente use: "Insertar en dual (nombre, fecha,". ReplaceAll (", (?!. *,)", ")"); – dragon66

Respuesta

61

El siguiente código debería reemplazar la última aparición de ',' con ')'.

StringBuilder b = new StringBuilder(yourString); 
b.replace(yourString.lastIndexOf(","), yourString.lastIndexOf(",") + 1, ")"); 
yourString = b.toString(); 

Nota Esto lanzar excepciones si el String no contiene una ','.

+0

Creo que lo etiquetó como java, ¿no es una red dot? – Dani

+9

Ambos lenguajes tienen StringBuilder – jjnguy

+0

10x, no lo sabía. Creo que su solución reemplazará a la última, y ​​no solo si está al final de la cadena. – Dani

1

Compruebe la longitud de la cuerda, revise el último carácter (si tiene la longitud es fácil) y reemplácelo - cuando sea necesario. Esta solución no es lang. específico. solo usa un sentido común.

+0

No es el último carácter, es la última aparición de un carácter específico. – jjnguy

+0

Bueno, la pregunta no es clara al respecto. "la última secuencia ..." Me pregunto qué quiso decir ... – Dani

+0

Es cierto, es por eso que fui por el método que funcionaría en ambos casos. – jjnguy

7
str = str.substring(0, str.lastIndexOf(",")) + ")"; 
+0

Eso cambiaría el último ",", indiscriminado si es el último carácter en una Cadena o no. – ty812

+0

Funciona dondequiera que esté ubicado ','; sin embargo, ignorará todo lo que sigue al último ','. – sfussenegger

+0

Una excepción será lanzada por 'substring' si' lastIndexOf' devuelve '-1'. – ADTC

30

Puede utilizar expresiones regulares:

String aResult = "Insert into dual (name,date,".replaceAll(",$", ")");

replaceAll(...) coincidirá con cadena de cadena con la expresión dada regular (parámetro 1) (en este caso vamos a igualar el último carácter si se trata de una coma). Reemplácelo con un reemplazo (parámetro 2) (en este caso es ')').

Plus! Si desea asegurarse de que se resuelvan los espacios de cola y las pestañas, simplemente puede cambiar la expresión regular a ',\[ \t\]*$'. NOTA: '\[' y '\]' no tienen barra invertida (no sé cómo escapársela correctamente).

Espero que esto ayude.

+1

+1, ¡esta es una forma más elegante! – dragon66

+2

Si usa replaceAll (", $", ")") como replaceAll ("[,] * $", ")"), funcionará aunque tenga varias comas. Por ej. "(nombre, fecha ,,," -> "(nombre, fecha)". Creo que esto es más flexible. – csonuryilmaz

2

La manera más fácil de leer ... que se puede utilizar para aprender acerca de cuerda y sus funciones

String myString = "Insert into dual (name,date,"; 
String newString = ""; 
int length = myString.length(); 
String lastChar = myString.substring(length-1); 

if (lastChar.contains(",")) { 
    newString = myString.substring(0,length-1) + ")"; 
} 

System.out.println(newString); 
+7

Más legible que qué? – sfussenegger

17

Este es un método personalizado para reemplazar sólo la última subcadena de una cadena dada. Sería útil para Usted:

private String replaceLast(String string, String from, String to) { 
    int lastIndex = string.lastIndexOf(from); 
    if (lastIndex < 0) return string; 
    String tail = string.substring(lastIndex).replaceFirst(from, to); 
    return string.substring(0, lastIndex) + tail; 
} 
+0

genial. Me funcionó. Solo necesitaba adaptarme a mis requisitos comerciales. –

0

probar este regex (^.+)b(.+$)

Ejemplo (Reemplazar el último carácter b)

System.out.println("1abchhhabcjjjabc".replaceFirst("(^.+)b(.+$)", "$1$2")); 
-1

cuál está para arriba con la molestia si sólo se puede hacer esto

word = (String) word.subSequence(0, word.length() -1); 

return s nueva cadena sin la última parte de una cadena.

0

para reemplazar un último carácter de la cadena por )

str = str.substring(0, str.length()-1)+")";

Asegúrese de que la cadena no está vacía o nula.

Cuestiones relacionadas