如何在Java中获取字符串中的最后一个字符,而不管字符串大小如何


79

我正在寻找一种从字符串中提取最后一个字符的方法,无论大小如何。让我们以以下字符串为例:

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

如您所见,完全是随机的字符串,但末尾有7个数字。我将如何取这7个数字?

编辑:

我只是意识到,String[] string = s.split(": ");只要我将string [2]用作数字,将string [1]用作中间的任何东西,这在这里将非常有用。


您的问题和几个答案都提到了String.split(),但是值得注意的s.split(": ")是,java.uitl.regex.Pattern每次调用它时都会编译一个新的,然后将字符串与该模式匹配,创建一个正则表达式Matcher和一个返回ArrayList之前的String[]。这将相对较慢,并且将分配远远超出解决此问题所需的资源。这是否重要取决于应用程序的性质。我通常会避免,split()除非我真的需要它。(请注意,split()没有,如果你各执一个字符使用正则表达式。)
rjb1290

Answers:


103

您可以做很多事情。

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

将在最后一个冒号之后得到所有内容。

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

最后一个空格之后的所有内容。

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

拆分所有数字序列;数字数组的最后一个元素可能就是您想要的。


4
lastIndexOf方法的一个偶然方面是,如果没有空格,lastIndexOf则将返回-1,因此您将得到整个字符串(s.substring(0))。
乔恩·斯基特

s.substring(s.lastIndexOf(':')+ 1); 我想用那个,但是我怎么能在第一个冒号之后得到字母呢?不是s.indexOf(“:”,1)吗?
PuppyKevin 2010年

143

怎么样:

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 ,它将仍然引发异常。


54

这个问题是“ Java String Right”在Google的最高搜索结果。

令人惊讶的是,还没有人提到Apache Commons StringUtils.right()

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

这也可以处理以下情况 textnull,其中许多其他答案将引发NullPointerException。


1
我也想知道 这种方式比处理所有可能的问题安全得多。
JaroslavKuboš16年

如果您希望/需要一个表达式将某些内容安全地转换为字符串并获取最后一个n字符,这也是唯一有效的答案。例如,您可以这样做StringUtils.right(Objects.toString(someObj), 7)
rjb1290

23

这段代码非常适合我:

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

7

您可以使用以下单行代码来实现

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

但是,如果输入字符串的长度小于7,请确保捕获Exception

如果要获取最后的'N'个字符,则可以用任何数字(例如N)替换7。


1
最好事先检查输入长度是否为7或更长,然后再执行子字符串。
Orique

4

我会使用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) ;
    } 

2
正则表达式应[0-9]{7}$确保它与最后7位数字匹配。
whiskeysierra

// @ WilliSchönborn:同意。OP的情况表明,字符串中的其他组将始终包含字母。我以为没有必要指定边界。
FK82

2
String inputstr = "abcd: efg: 1006746"
int startindex = inputstr.length() - 10;
String outputtendigitstr = inputstr.substring(startindex);

确保您检查的字符串长度大于10。


1

这应该工作

 Integer i= Integer.parseInt(text.substring(text.length() - 7));



0

例如:“ 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();

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.