如何在Java中获取string中的最后一个字符,而不考虑string大小

我正在寻找一种方法来从string中取出最后一个字符,而不pipe大小。 让我们把这些string作为例子:

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

正如你所看到的,完全随机的string,但是最后有7个数字。 我将如何能够采取这7个数字?

编辑:

我刚刚意识到那个String[] string = s.split(": "); 在这里工作会很好,只要我把string[2]和string[1]称为中间的任何东西。

很多事情你可以做。

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

会在最后一个冒号后得到一切。

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

最后一个空间之后的一切

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

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

怎么样:

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

当然,假设最后有7个字符。 它会抛出一个exception,如果你通过它“12345”。 你可以这样解决:

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

要么

 String numbers = text.length() <= 7 ? text : text.substring(text.length() - 7); 

请注意,这仍然没有做任何validation,结果string包含数字 – 它仍然会抛出一个exception,如果text为空。

这段代码完美地适用于我:

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

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

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

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

这也处理了text为空的情况,其中许多其他答案会抛出一个NullPointerException。

你可以使用这个单行代码实现它

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

但是如果input的string长度小于7,一定要捕获exception

如果你想得到最后的“N”个字符,你可以用任意数字N代替7。

我会使用String.split或正则expression式:


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

这应该工作

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

我将使用StringBuffer类, .reverse()string,再次获取.substring(0,7).reverse()结果。 但这是3个电话。

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

确保你检查string的长度是多于10。