Как получить последние символы в строке в Java, независимо от размера строки
Я ищу способ вытащить последние символы из строки, независимо от размера. Давайте возьмем эти строки в пример:
"abcd: efg: 1006746"
"bhddy: nshhf36: 1006754"
"hfquv: nd: 5894254"
Как вы можете видеть, совершенно случайные строки, но они имеют 7 чисел в конце. Как я смогу взять эти 7 чисел?
Edit:
Я только что понял, что String[] string = s.split(": "); будет отлично работать здесь, пока я называю string[2] для чисел и string[1] для чего-либо в середине.
10 ответов:
много вещей, которые вы могли бы сделать.
s.substring(s.lastIndexOf(':') + 1);получит все после последнего двоеточия.
s.substring(s.lastIndexOf(' ') + 1);все после последнего места.
String numbers[] = s.split("[^0-9]+");разбивает все последовательности цифр; последний элемент массива чисел, вероятно, что вы хотите.
как насчет:
String numbers = text.substring(text.length() - 7);это предполагает, что там are 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.
этот вопрос является лучшим результатом Google для "Java String Right".
Удивительно, но никто еще не упомянул Apache Commons StringUtils.правильно ():
String numbers = org.apache.commons.lang.StringUtils.right( text, 7 );Это также обрабатывает случай, когда
textравно null, где многие другие ответы будут вызывать исключение NullPointerException.
этот код отлично работает для меня:
String numbers = text.substring(Math.max(0, text.length() - 7));
вы можете достичь этого, используя эту единственную строку код :
String numbers = text.substring(text.length() - 7, text.length());но обязательно поймать исключение, если длина входной строки меньше 7.
вы можете заменить 7 на любое число, скажем N, если вы хотите получить последние символы 'N'.
Я бы использовал либо
String.splitили регулярное выражение:
С Помощью Строки.сплит
String[] numberSplit = yourString.split(":") ; String numbers = numberSplit[ (numberSplit.length-1) ] ; //!! last array element
Используя Регулярное Выражение (требуется
import java.util.regex.*)String numbers = "" ; Matcher numberMatcher = Pattern.compile("[0-9]{7}").matcher(yourString) ; if( matcher.find() ) { numbers = matcher.group(0) ; }
StringUtils.substringAfterLast ("abcd: efg: 1006746", ": ") = "1006746";
пока формат строки фиксирован, вы можете использовать substringAfterLast.
Я бы использовал класс StringBuffer,
.reverse()строку, получаем.substring(0,7)и.reverse()снова результат. Но 3 звонка.
String inputstr = "abcd: efg: 1006746" int startindex = inputstr.length() - 10; String outputtendigitstr = inputstr.substring(startindex);убедитесь, что длина строки больше 10.
Comments