Подтвердить что ты не робот

Как получить строку после последней запятой в java?

Как получить содержимое после последней запятой в строке с использованием регулярного выражения?

Пример:

abcd,fg;ijkl, cas

Выход должен быть cas


Примечание. Между последней запятой и символом 'c' существует пробел, который также необходимо удалить. Также шаблон содержит только одно пробел после последней запятой.

4b9b3361

Ответ 1

Использование регулярных выражений:

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

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

Выходы:

cas

Или вы можете использовать простые методы String:

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

Ответ 2

Возможно, что-то вроде:

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

То есть, я беру подстроку, возникающую после последней запятой, и затем удаляю окружающее пустое пространство...

Ответ 3

Вы должны всегда всегда искать ответ на этот вопрос в Apache Commons... и базовые должны быть включены в каждую сборку. Наиболее подходящим (не использующим регулярные выражения) является следующее:

StringUtils.substringAfterLast(String str, String separator)

Но если вы действительно хотите использовать регулярное выражение по какой-то причине, существует несколько методов, которые вы можете использовать, например.

String removeAll(String text, String regex)

или

String removeFirst(String text, String regex)

Как забавно, вы можете получить то, что хотите, сделав это (полагаясь на жадные кванторы):

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

StringUtils является частью apache commons-lang3.

Помимо чего-либо еще нет смысла повторно изобретать колесо. Но я могу представить себе как минимум 2 других преимущества:

  • люди Apache также могут рассчитывать на то, что "gotchas" на протяжении многих лет. Это позволит вам продолжить, гм, интересный материал.
  • эти методы Apache обычно называются хорошо: вы не нужно загромождать свой код с помощью методов утилиты stoopid; вместо этого у вас есть хороший чистый метод, который делает то, что он говорит на жесть...

PS нет ничего, что помешало бы вам взглянуть на исходный код, чтобы проверить, что на самом деле делает этот метод. Обычно их очень легко понять.

Ответ 4

Вы можете попробовать следующее:

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

Ответ 5

Только одно пространство:

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

От 0 до n пробелов:

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

Ответ 6

Как насчет следующего:

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

Ответ 7

и еще один:)

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

Ответ 8

str.split(",");

то

str.trim()