Как получить строку после последней запятой в Java? - PullRequest
22 голосов
/ 01 марта 2012

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

Пример:

abcd,fg;ijkl, cas

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


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

Ответы [ 8 ]

43 голосов
/ 01 марта 2012

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

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

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

Выходы:

cas

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

  1. System.out.println(s.substring(s.lastIndexOf(",") + 1).trim());
  2. System.out.println(s.substring(s.lastIndexOf(", ") + 2));
19 голосов
/ 01 марта 2012

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

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

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

6 голосов
/ 04 декабря 2016

Вы должны всегда всегда искать ответ на этот вопрос в 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 других преимущества:

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

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

1 голос
/ 01 марта 2012

только один пробел:

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

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

String[] aux = theInputString.split(",\\s*");
string result = aux[aux.length-1];
1 голос
/ 01 марта 2012

Вы можете попробовать это:

public static void main(String[] args) {
    String s = " abcd,fg;ijkl, cas";
    String[] words = s.split(",");
    System.out.println(words[words.length-1].trim());
}
0 голосов
/ 01 марта 2012

и еще один:)

String s = "abcd,fg;ijkl, cas";
String result = s.replaceAll(".*, ", "");
0 голосов
/ 01 марта 2012

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

String a = "abcd,fg;ijkl, cas";
String[] result = a.split(",[ ]*");
String expectedResult = result[result.length - 1]);
0 голосов
/ 01 марта 2012
str.split(",");

затем

str.trim()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...