Я ищу способ вытащить последние символы из строки независимо от размера. Давайте рассмотрим эти строки в качестве примера:
"abcd: efg: 1006746"
"bhddy: nshhf36: 1006754"
"hfquv: nd: 5894254"
Как видите, совершенно случайные строки, но в конце у них есть 7 чисел. Как я смогу взять эти 7 чисел?
Редактировать:
Я только что понял, String[] string = s.split(": ");
что здесь это будет отлично работать, если я буду вызывать строку [2] для чисел и строку [1] для чего-нибудь посередине.
String.split()
, но стоит отметить, чтоs.split(": ")
он будет компилировать новыйjava.uitl.regex.Pattern
каждый раз, когда вы его вызываете, а затем сопоставляет свою строку с этим шаблоном, создавая регулярное выражениеMatcher
иArrayList
перед темString[]
, как оно будет возвращено. Это будет относительно медленно, и на решение этой проблемы будет выделено гораздо больше, чем необходимо. Будет ли это иметь значение, зависит от характера вашего приложения. Я обычно избегаю,split()
если мне это действительно не нужно. (Обратите внимание , чтоsplit()
это не использовать регулярное выражение , если вы разделите на один символ.)Ответы:
Вы могли бы многое сделать.
s.substring(s.lastIndexOf(':') + 1);
получит все после последнего двоеточия.
s.substring(s.lastIndexOf(' ') + 1);
все после последнего пробела.
String numbers[] = s.split("[^0-9]+");
разбивает все последовательности цифр; последний элемент массива чисел - это, вероятно, то, что вам нужно.
источник
lastIndexOf
подхода заключается в том, что если не все пробелы,lastIndexOf
вернет -1, так что вы будете в конечном итоге с целой строки (s.substring(0)
).Как насчет:
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
равно нулю.источник
Этот вопрос является лучшим результатом Google для "Java String Right".
Удивительно, но никто еще не упомянул Apache Commons StringUtils.right () :
String numbers = org.apache.commons.lang.StringUtils.right( text, 7 );
Это также обрабатывает случай, когда значение
text
null, когда многие другие ответы будут вызывать исключение NullPointerException.источник
n
символам. Например, вы могли бы это сделатьStringUtils.right(Objects.toString(someObj), 7)
.Этот код отлично работает у меня:
String numbers = text.substring(Math.max(0, text.length() - 7));
источник
Вы можете добиться этого, используя этот однострочный код:
String numbers = text.substring(text.length() - 7, text.length());
Но не забудьте поймать Exception, если длина входной строки меньше 7 .
Вы можете заменить 7 любым числом, например N, если хотите получить последние N символов.
источник
Я бы использовал либо
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) ; }
источник
[0-9]{7}$
таким, чтобы оно соответствовало последним 7 цифрам.String inputstr = "abcd: efg: 1006746" int startindex = inputstr.length() - 10; String outputtendigitstr = inputstr.substring(startindex);
Убедитесь, что длина строки больше 10.
источник
Это должно работать
Integer i= Integer.parseInt(text.substring(text.length() - 7));
источник
StringUtils.substringAfterLast ("abcd: efg: 1006746", ":") = "1006746";
Пока формат строки фиксирован, вы можете использовать substringAfterLast .
источник
org.apache.commons.lang3.StringUtils.substring(s, -7)
дает вам ответ. Он возвращает ввод, если он короче 7, и null, если s == null. Он никогда не вызывает исключения.
См. Https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substring-java.lang.String-int-int-
источник
Например: «abcd: efg: 1006746» «bhddy: nshhf36: 1006754» «hfquv: nd: 5894254»
-Шаг 1:
String firstString = "abcd: efg: 1006746";
-Шаг 2:
String lastSevenNumber = firstString.substring(firstString.lastIndexOf(':'), firstString.length()).trim();
источник