Как получить последние символы в String в Java, независимо от размера строки
Я ищу способ вытащить последние символы из строки, независимо от размера. Давайте возьмем эти строки в пример:
"abcd: efg: 1006746"
"bhddy: nshhf36: 1006754"
"hfquv: nd: 5894254"
Как вы можете видеть, полностью случайные строки, но у них есть 7 номеров в конце. Как я могу взять эти 7 номеров?
Edit:
Я только понял, что String[] string = s.split(": ");
будет работать отлично здесь, пока я вызываю строку [2] для чисел и строки [1] для чего-либо посередине.
Ответы
Ответ 1
Множество вещей, которые вы могли бы сделать.
s.substring(s.lastIndexOf(':') + 1);
получит все после последнего двоеточия.
s.substring(s.lastIndexOf(' ') + 1);
все после последнего пробела.
String numbers[] = s.split("[^0-9]+");
разделяет все последовательности цифр; последний элемент массива чисел, вероятно, вы хотите.
Ответ 2
Как насчет:
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
имеет значение null.
Ответ 3
Этот код отлично работает для меня:
String numbers = text.substring(Math.max(0, text.length() - 7));
Ответ 4
Этот вопрос является лучшим результатом Google для "Java String Right".
Удивительно, но никто еще не упомянул Apache Commons StringUtils.right():
String numbers = org.apache.commons.lang.StringUtils.right( text, 7 );
Это также обрабатывает случай, когда text
имеет значение null, где многие другие ответы будут вызывать исключение NullPointerException.
Ответ 5
Вы можете достичь этого, используя эту единственную строку :
String numbers = text.substring(text.length() - 7, text.length());
Но обязательно catch Exception, если длина входной строки меньше 7.
Вы можете заменить 7 на любое число, например N, если вы хотите получить последние символы "N".
Ответ 6
Я бы использовал либо String.split
, либо regex:
Использование 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) ;
}
Ответ 7
Это должно работать
Integer i= Integer.parseInt(text.substring(text.length() - 7));
Ответ 8
Я бы использовал класс StringBuffer, .reverse()
строку, снова получив результат .substring(0,7)
и .reverse()
. Но это 3 вызова.
Ответ 9
String inputstr = "abcd: efg: 1006746"
int startindex = inputstr.length() - 10;
String outputtendigitstr = inputstr.substring(startindex);
Убедитесь, что вы проверяете длину строки более 10.