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.
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:
System.out.println(s.substring(s.lastIndexOf(",") + 1).trim());
System.out.println(s.substring(s.lastIndexOf(", ") + 2));
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 ...
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:
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.
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());
}
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];
Was ist mit dem Folgenden:
String a = "abcd,fg;ijkl, cas";
String[] result = a.split(",[ ]*");
String expectedResult = result[result.length - 1]);
und einer mehr :)
String s = "abcd,fg;ijkl, cas";
String result = s.replaceAll(".*, ", "");