web-dev-qa-db-fra.com

Remplacer la dernière partie de la chaîne

Je veux remplacer la dernière chaîne qui est un , avec ) 

Supposons que la chaîne est:

Insérer en double (nom, date,

être converti en:

Insérer en double (nom, date)

38
Harish

Le code suivant doit remplacer la dernière occurrence d'un ',' par un ')'.

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

Note Ceci lancera des exceptions si la String ne contient pas un ','.

69
jjnguy

Ceci est une méthode personnalisée pour remplacer uniquement la dernière sous-chaîne d'une chaîne donnée. Cela vous serait utile: 

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;
}
17
Ivan Caderno
str = str.substring(0, str.lastIndexOf(",")) + ")";
8
sfussenegger

La manière la plus lisible ... que vous pouvez utiliser pour en savoir plus sur String et ses fonctions

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);
2
ty812

Vérifiez la longueur de la chaîne, vérifiez le dernier caractère (si vous avez la longueur c'est facile) Et remplacez-le - si nécessaire . Cette solution n'est pas lang. spécifique. juste utiliser un bon sens.

1
Dani

Sur une recherche similaire, j'ai trouvé cette réponse:

https://stackoverflow.com/a/37066403/875282

Je pense que c'est la meilleure solution car elle utilise les méthodes Java comme prévu plutôt que d'essayer de réinventer la roue. Il lit essentiellement la chaîne en arrière et utilise la méthode replaceFirst de l'objet String, c'est exactement ce que je cherchais.

Voici la documentation sur la méthode replaceFirst String et la fonction inverse de StringBuffer: https://docs.Oracle.com/javase/8/docs/api/Java/lang/String.html#replaceFirst-Java.lang .String-Java.lang.String-

https://docs.Oracle.com/javase/8/docs/api/Java/lang/StringBuffer.html#reverse--

Voici comment je l'ai implémenté pour simplement supprimer certaines balises html 'pre' d'un fragment de code que je voulais interpréter. Pensez également à inverser votre chaîne de recherche, puis à tout revenir aux mots suivants.

private String stripHtmlPreTagsFromCodeSnippet(String snippet) {
    String halfCleanSnippet = snippet.replaceFirst("<pre>", "");
    String reverseSnippet = new StringBuffer(halfCleanSnippet).reverse().toString();
    String reverseSearch = new StringBuffer("</pre>").reverse().toString();
    String reverseCleanSnippet = reverseSnippet.replaceFirst(reverseSearch, "");
    return new StringBuffer(reverseCleanSnippet).reverse().toString();
}
0
matttrach

Essayez cette expression régulière (^.+)b(.+$)

Exemple (remplace le dernier caractère b )

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