Как получить последние символы в строке в Java, независимо от размера строки - PullRequest
71 голосов
/ 14 июля 2010

Я ищу способ извлечь последние символы из строки независимо от их размера. Давайте возьмем эти строки в пример:

"abcd: efg: 1006746"
"bhddy: nshhf36: 1006754"
"hfquv: nd: 5894254"

Как видите, совершенно случайные строки, но они имеют 7 цифр в конце. Как я смогу взять эти 7 чисел?

Edit:

Я только что понял, что String[] string = s.split(": "); будет отлично работать здесь, пока я вызываю строку [2] для чисел и строку [1] для всего в середине.

Ответы [ 10 ]

136 голосов
/ 14 июля 2010

Как насчет:

String numbers = text.substring(text.length() - 7);

Это предполагает, что - это 7 символов в конце, конечно. Он выдаст исключение, если вы передадите ему «12345». Вы могли бы решить это следующим образом:

String numbers = text.substring(Math.max(0, text.length() - 7));

или

String numbers = text.length() <= 7 ? text : text.substring(text.length() - 7);

Обратите внимание, что по-прежнему не выполняется проверка того, что результирующая строка содержит числа - и все равно будет выдано исключение, если text равно нулю.

91 голосов
/ 14 июля 2010

Много вещей, которые вы могли бы сделать.

s.substring(s.lastIndexOf(':') + 1);

получит все после последнего двоеточия.

s.substring(s.lastIndexOf(' ') + 1);

все после последнего пробела.

String numbers[] = s.split("[^0-9]+");

разделяет все последовательности цифр; последний элемент массива чисел, вероятно, то, что вы хотите.

44 голосов
/ 16 марта 2015

Этот вопрос является лучшим результатом Google для "Java String Right".

Удивительно, но никто еще не упомянул Apache Commons StringUtils.right () :

String numbers = org.apache.commons.lang.StringUtils.right( text, 7 );

Это также обрабатывает случай, когда text равен нулю, когда многие другие ответы выдают исключение NullPointerException.

22 голосов
/ 11 апреля 2013

Этот код прекрасно работает для меня:

String numbers = text.substring(Math.max(0, text.length() - 7));
7 голосов
/ 19 ноября 2013

Вы можете достичь этого, используя эту единственную строку код:

String numbers = text.substring(text.length() - 7, text.length());

Но обязательно перехватывает Exception, если длина входной строки меньше 7 .

Вы можете заменить 7 на любое число, скажем, N, если хотите получить последние символы 'N'.

4 голосов
/ 14 июля 2010

Я бы использовал String.split или регулярное выражение:


Использование String.split

String[] numberSplit = yourString.split(":") ; 
String numbers = numberSplit[ (numberSplit.length-1) ] ; //!! last array element

Использование RegEx (требуется import java.util.regex.*)

String numbers = "" ;
Matcher numberMatcher = Pattern.compile("[0-9]{7}").matcher(yourString) ;
    if( matcher.find() ) {
            numbers = matcher.group(0) ;
    } 
1 голос
/ 03 мая 2018

StringUtils.substringAfterLast ("abcd: efg: 1006746", ":") = "1006746";

Пока формат строки фиксирован, вы можете использовать substringAfterLast .

1 голос
/ 17 января 2017
String inputstr = "abcd: efg: 1006746"
int startindex = inputstr.length() - 10;
String outputtendigitstr = inputstr.substring(startindex);

Убедитесь, что вы проверили длину строки больше 10.

1 голос
/ 14 июля 2010

Это должно работать

 Integer i= Integer.parseInt(text.substring(text.length() - 7));
0 голосов
/ 09 декабря 2011

Я бы использовал класс StringBuffer, .reverse() строку, получил бы .substring(0,7) и .reverse() результат снова.Но это 3 звонка.

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