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

如何在Java中获取字符串中的最后一个字符,而不考虑字符串大小,java,string,Java,String,我正在寻找一种从字符串中提取最后一个字符的方法,而不管大小。让我们以这些字符串为例: "abcd: efg: 1006746" "bhddy: nshhf36: 1006754" "hfquv: nd: 5894254" 正如您所看到的,完全随机的字符串,但它们的末尾有7个数字。我怎样才能接受这7个数字 编辑: 我刚刚意识到String[]String=s.split(“:”)在这里工作得很好,只要我为中间的任何东西调用字符串[2 ]和字符串[1 ]。:如何? String numbers =

我正在寻找一种从字符串中提取最后一个字符的方法,而不管大小。让我们以这些字符串为例:

"abcd: efg: 1006746"
"bhddy: nshhf36: 1006754"
"hfquv: nd: 5894254"
正如您所看到的,完全随机的字符串,但它们的末尾有7个数字。我怎样才能接受这7个数字

编辑:

我刚刚意识到
String[]String=s.split(“:”)在这里工作得很好,只要我为中间的任何东西调用字符串[2 ]和字符串[1 ]。

如何?
String numbers = text.substring(text.length() - 7);
当然,这假设末尾有7个字符。如果您将其传递为“12345”,它将抛出异常。您可以通过以下方式解决此问题:

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

stringnumbers=text.length()这应该可以

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

你可以做很多事情

s.substring(s.lastIndexOf(':') + 1);
将在最后一个冒号后获取所有内容

s.substring(s.lastIndexOf(' ') + 1);
最后一个空格后的所有内容

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

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

我可以使用
String.split
或正则表达式:


使用String.split

String[] numberSplit = yourString.split(":") ; 
String numbers = numberSplit[ (numberSplit.length-1) ] ; //!! last array element

使用RegEx(需要
导入java.util.RegEx.


这段代码对我来说非常适用:

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

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

String numbers = text.substring(text.length() - 7, text.length());
但是,如果输入字符串长度小于7,请确保捕获异常


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

这个问题是谷歌搜索“Java字符串正确”的最重要结果

令人惊讶的是,还没有人提到Apache Commons:

这也处理了
text
为null的情况,其中许多其他答案都会抛出NullPointerException

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

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

StringUtils.substringAfterLast(“abcd:efg:1006746”,“:”)=“1006746”

只要字符串的格式是固定的,就可以使用substringAfterLast

org.apache.commons.lang3.StringUtils.substring(s, -7) 
给你答案。如果小于7,则返回输入;如果s==null,则返回null。它从不抛出异常

参见

例如:“abcd:efg:1006746” “bhddy:NSHF36:1006754” “hfquv:nd:5894254”

-第一步:
stringfirststring=“abcd:efg:1006746”


-步骤2:
String lastsevennenumber=firstString.substring(firstString.lastIndexOf(“:”),firstString.length()).trim()

方法的一个意外方面是,如果没有空格,
lastIndexOf
将返回-1,因此您将得到整个字符串(
s.substring(0)
).s.substring(s.lastIndexOf(“:”)+1);我想用这个,但是我怎样才能得到第一个冒号后面的字母呢?它不是s.indexOf(“:”,1)吗?正则表达式应该是
[0-9]{7}$
,以确保它匹配最后7位。@Willi Schönborn:同意。OP的案例表明字符串中的其他组始终包含字母。我假设没有必要指定边界。最好提前检查输入长度是否为7或更长,然后再执行子字符串。我也不知道。这种方法比处理所有可能的问题安全得多。如果您希望/需要一个表达式将某个内容安全地转换为字符串并获取最后的
n
字符,那么这也是唯一有效的答案。例如,您可以执行
StringUtils.right(Objects.toString(someObj),7)
。您的问题和一些答案都提到
String.split()
,但值得注意的是,
s.split(“:”
将在每次调用时编译一个新的
java.uitl.regex.Pattern
,然后将字符串与该模式匹配,在返回的
字符串[]
之前创建一个正则表达式
匹配器
和一个
数组列表
。它将相对缓慢,并且将分配远远超过解决此问题所需的资源。这是否重要取决于应用程序的性质。我通常避免使用
split()
,除非我真的需要它。(请注意,如果在单个字符上拆分,则
split()
不使用正则表达式。)
String numbers = org.apache.commons.lang.StringUtils.right( text, 7 );
String inputstr = "abcd: efg: 1006746"
int startindex = inputstr.length() - 10;
String outputtendigitstr = inputstr.substring(startindex);
org.apache.commons.lang3.StringUtils.substring(s, -7)