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)
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)
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 ','
.
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.
str = str.substring(0, str.lastIndexOf(",")) + ")";
Questo cambierebbe l'ultimo ",", indiscriminato se è l'ultimo carattere in una stringa o meno. – ty812
Funziona ovunque ',' si trova - ignorerà tutto ciò che segue l'ultimo ',' però. – sfussenegger
Un'eccezione verrà generata da 'sottostringa' se' lastIndexOf' restituisce '-1'. – ADTC
È 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, questo è un modo più elegante! – dragon66
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
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);
Più leggibile di quello che? – sfussenegger
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;
}
cool. ha funzionato per me. Avevo solo bisogno di adattarmi al mio requisito aziendale –
Prova questa regex (^.+)b(.+$)
Esempio (Sostituire l'ultimo carattere b)
System.out.println("1abchhhabcjjjabc".replaceFirst("(^.+)b(.+$)", "$1$2"));
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.
per sostituire un ultimo carattere della stringa da )
str = str.substring(0, str.length()-1)+")";
Assicurarsi che la stringa non è vuoto o nullo.
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. –
Basta usare: "Inserisci in doppio (nome, data,". ReplaceAll (", (?!. *,)", ")"); – dragon66