it-swarm.com.de

Wie bekomme ich den String nach dem letzten Komma in Java?

Wie erhalte ich den Inhalt nach dem letzten Komma in einem String mit einem regulären Ausdruck?

Beispiel: 

abcd,fg;ijkl, cas

Die Ausgabe sollte cas sein.


Hinweis: Zwischen dem letzten Komma und dem Zeichen 'c' ist ein Leerzeichen, das ebenfalls entfernt werden muss. Auch das Muster enthält nur ein Leerzeichen nach dem letzten Komma.

22
Nitish

Reguläre Ausdrücke verwenden:

Pattern p = Pattern.compile(".*,\\s*(.*)");
Matcher m = p.matcher("abcd,fg;ijkl, cas");

if (m.find())
    System.out.println(m.group(1));

Ausgänge:

cas

Oder Sie können einfache String Methoden verwenden:

  1. System.out.println(s.substring(s.lastIndexOf(",") + 1).trim());
  2. System.out.println(s.substring(s.lastIndexOf(", ") + 2));
44
dacwe

Vielleicht so etwas wie:

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

Das heißt, ich nehme den nach dem letzten Komma auftretenden Teilstring und entferne danach das umgebende Leerzeichen ...

16
Mathias Schwarz

Sie sollten immer immer in Apache Commons nach der Antwort auf diese Art von Fragen suchen ... und die grundlegenden sollten in jedem Build enthalten sein. Am besten geeignet ist es, Regex nicht zu verwenden:

StringUtils.substringAfterLast(String str, String separator)

Wenn Sie jedoch aus irgendeinem Grund wirklich einen Regex verwenden möchten, gibt es einige Methoden, die Sie möglicherweise verwenden möchten, z.

String removeAll(String text, String regex)

oder

String removeFirst(String text, String regex)

Amüsanterweise können Sie das bekommen, was Sie wollen (indem Sie sich auf gierige Quantifizierer verlassen):

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

StringUtils ist Teil von Apache commons-lang3.

Abgesehen von allem anderen gibt es keinen Sinn, das Rad neu zu erfinden. Mir fallen jedoch mindestens zwei weitere Vorteile ein:

  1. man kann sich darauf verlassen, dass die Apache-Leute im Laufe der Jahre die meisten "___ Gotchas" erwartet haben. So können Sie mit interessanten, interessanten Dingen weitermachen. 
  2. diese Apache-Methoden haben normalerweise einen guten Namen: Sie müssen Ihren Code nicht mit stoopid-Utility-Methoden verstopfen.

PS: Es gibt nichts, was Sie daran hindern könnte, den Quellcode anzusehen, um zu sehen, was die Methode tatsächlich tut. Normalerweise sind sie sehr leicht zu verstehen.

5
mike rodent

Sie könnten dies versuchen:

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

Nur ein Raum:

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

0 bis n Leerzeichen:

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

Was ist mit dem Folgenden:

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

und einer mehr :)

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