2009-11-02 24 views
32

voglio sostituire l'ultima stringa che è un , con )Sostituire ultima parte della stringa

Supponiamo che la stringa è:

Inserire nel doppio (nome, data,

da convertire in:

Inserire in doppio (nome, data)

+3

Hai preso in considerazione la possibilità di riscrivere il ciclo in modo da visualizzare la giusta quantità di virgole? Ho visto una domanda StackOverflow per ottenere esattamente quel ciclo il più efficiente possibile. –

+0

Basta usare: "Inserisci in doppio (nome, data,". ReplaceAll (", (?!. *,)", ")"); – dragon66

risposta

61

Il seguente codice deve sostituire l'ultima occorrenza di uno ',' con un ')'.

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

Nota Questo getterà eccezioni se il String non contiene un ','.

+0

Penso che lo abbia taggato come java, non sia un string-string a dotnet? – Dani

+9

Entrambe le lingue hanno StringBuilder – jjnguy

+0

10x, non lo sapeva. Penso che la tua soluzione sostituirà l'ultima, e non solo se è alla fine della stringa. – Dani

1

Controllare la lunghezza della stringa, controllare l'ultimo carattere (se si ha la lunghezza è facile) e sostituirlo - quando necessario. Questa soluzione non è lang. specifica. basta usare un buon senso.

+0

Non è l'ultimo carattere, è l'ultima occorrenza di un carattere specifico. – jjnguy

+0

Bene, la domanda non è chiara a riguardo. "l'ultima stringa .." Mi chiedo cosa intendesse ... – Dani

+0

Vero, è per questo che sono andato per il metodo che avrebbe funzionato in entrambi i casi. – jjnguy

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

Questo cambierebbe l'ultimo ",", indiscriminato se è l'ultimo carattere in una stringa o meno. – ty812

+0

Funziona ovunque ',' si trova - ignorerà tutto ciò che segue l'ultimo ',' però. – sfussenegger

+0

Un'eccezione verrà generata da 'sottostringa' se' lastIndexOf' restituisce '-1'. – ADTC

30

È possibile utilizzare espressioni regolari:

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

replaceAll(...) corrisponderà string con il dato espressione regolare (parametro 1) (in questo caso abbiniamo l'ultimo carattere se si tratta di una virgola). Lo sostituisce con una sostituzione (parametro 2) (in questo caso è ')').

Plus! Se si desidera assicurarsi che gli spazi di coda e le schede vengano gestiti, è sufficiente modificare l'espressione regolare in ",\[ \t\]*$". NOTA '\[' e '\]' è senza barra rovesciata (non so come debuggirlo correttamente).

Spero che questo aiuti.

+1

+1, questo è un modo più elegante! – dragon66

+2

Se si utilizza replaceAll (", $", ")") come replaceAll ("[,] * $", ")"), funzionerà anche se contiene diverse virgole. Per esempio; "(nome, data ,,," -> "(nome, data)." Penso che questo sia più flessibile – csonuryilmaz

2

Il modo più leggibile ... che è possibile utilizzare per conoscere String e le sue funzioni

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

Più leggibile di quello che? – sfussenegger

17

Si tratta di un metodo personalizzato per sostituire solo l'ultima sottostringa di una stringa. Sarebbe utile per voi:

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

cool. ha funzionato per me. Avevo solo bisogno di adattarmi al mio requisito aziendale –

0

Prova questa regex (^.+)b(.+$)

Esempio (Sostituire l'ultimo carattere b)

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

cosa è in su con il fastidio se si può semplicemente fare questo

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

questo ritorno s nuova stringa senza l'ultima parte di una stringa.

0

per sostituire un ultimo carattere della stringa da )

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

Assicurarsi che la stringa non è vuoto o nullo.

Problemi correlati