我正在寻找一种从字符串中提取最后一个字符的方法,无论大小如何。让我们以以下字符串为例:
"abcd: efg: 1006746"
"bhddy: nshhf36: 1006754"
"hfquv: nd: 5894254"
如您所见,完全是随机的字符串,但末尾有7个数字。我将如何取这7个数字?
编辑:
我只是意识到,String[] string = s.split(": ");只要我将string [2]用作数字,将string [1]用作中间的任何东西,这在这里将非常有用。
Answers:
您可以做很多事情。
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为null ,它将仍然引发异常。
这个问题是“ Java String Right”在Google的最高搜索结果。
令人惊讶的是,还没有人提到Apache Commons StringUtils.right():
String numbers = org.apache.commons.lang.StringUtils.right( text, 7 );
这也可以处理以下情况 textnull,其中许多其他答案将引发NullPointerException。
n字符,这也是唯一有效的答案。例如,您可以这样做StringUtils.right(Objects.toString(someObj), 7)。
我会使用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位数字匹配。
StringUtils.substringAfterLast(“ abcd:efg:1006746”,“:”)=“ 1006746”;
只要字符串的格式是固定的,就可以使用substringAfterLast。
org.apache.commons.lang3.StringUtils.substring(s, -7)
给你答案。如果输入小于7,则返回输入;如果s == null,则返回null。它永远不会引发异常。
String.split(),但是值得注意的s.split(": ")是,java.uitl.regex.Pattern每次调用它时都会编译一个新的,然后将字符串与该模式匹配,创建一个正则表达式Matcher和一个返回ArrayList之前的String[]。这将相对较慢,并且将分配远远超出解决此问题所需的资源。这是否重要取决于应用程序的性质。我通常会避免,split()除非我真的需要它。(请注意,split()并没有,如果你各执一个字符使用正则表达式。)