web-dev-qa-db-fra.com

Comment obtenir la chaîne après la dernière virgule en java?

Comment obtenir le contenu après la dernière virgule d'une chaîne en utilisant une expression régulière?

Exemple: 

abcd,fg;ijkl, cas

La sortie devrait être cas


Remarque: Il y a un espace entre la dernière virgule et le caractère 'c' qui doit également être supprimé. En outre, le modèle ne contient qu'un espace après la dernière virgule.

22
Nitish

Peut-être quelque chose comme:

String s = "abcd,fg;ijkl, cas";
String result = s.substring(s.lastIndexOf(',') + 1).trim();

C’est-à-dire que je prends la sous-chaîne apparaissant après la dernière virgule et supprime ensuite les espaces blancs environnants ...

16
Mathias Schwarz

Vous devriez toujours toujours chercher la réponse à ce type de question dans Apache Commons ... et les questions de base devraient être incluses dans chaque construction. Le plus approprié (ne pas utiliser de regex) est le suivant:

StringUtils.substringAfterLast(String str, String separator)

Mais si vous voulez vraiment utiliser une expression régulière pour une raison quelconque, vous pouvez utiliser quelques méthodes, par exemple:.

String removeAll(String text, String regex)

ou

String removeFirst(String text, String regex)

De manière amusante, vous pouvez obtenir ce que vous voulez en faisant cela (en vous fiant à des quantificateurs gourmands):

StringUtils.removeFirst( myString, ".*," );

StringUtils fait partie d'Apache commons-lang3.

En dehors de toute autre chose, il est inutile de réinventer la roue. Mais je peux penser à au moins 2 autres avantages:

  1. on peut aussi compter sur le peuple Apache pour avoir anticipé la plupart des "pièges" au fil des ans. Cela vous laisse pour continuer avec, euh, Des choses intéressantes. 
  2. ces méthodes Apache portent généralement bien leur nom: vous n'avez pas à encombrer votre code avec des méthodes utilitaires stoopid; à la place, vous avez une méthode propre et agréable qui fait ce qui est indiqué sur le tin ...

PS: rien ne vous empêche de consulter le code source pour vérifier si la méthode fonctionne réellement. Ils sont généralement très faciles à comprendre.

5
mike rodent

Vous pouvez essayer ceci:

public static void main(String[] args) {
    String s = " abcd,fg;ijkl, cas";
    String[] words = s.split(",");
    System.out.println(words[words.length-1].trim());
}
1
assylias

Un seul espace:

String[] aux = theInputString.split(",\\s");
string result = aux[aux.length-1];

0 à n espaces:

String[] aux = theInputString.split(",\\s*");
string result = aux[aux.length-1];
1
Mario Corchero

Qu'en est-il de ce qui suit:

String a = "abcd,fg;ijkl, cas";
String[] result = a.split(",[ ]*");
String expectedResult = result[result.length - 1]);
0
khmarbaise

et un de plus :)

String s = "abcd,fg;ijkl, cas";
String result = s.replaceAll(".*, ", "");
0
rompetroll