Java lastIndexOf()查找最后一个字母数字字符

Java lastIndexOf()查找最后一个字母数字字符,java,string,lastindexof,Java,String,Lastindexof,我有一个字符串,我需要找到这个字符串中最后出现的字母数字字符。无论字符串中的最后一个字母数字字符是哪一个,我都需要该索引。为了 text="Hello World!- " 输出将是“d”的索引 text="Hello02, " 输出将是“2”的索引。 我知道我可以用一种“蛮力”的方式,检查每一个字母和每一个数字,然后找到最高的索引,但我确信有一种更整洁的方法,但我找不到 使用正则表达式进行重载 要获取最后一个字母数字字符的索引(-1,如果字符串中没有字母数字): 要获取角色本身,请执行以下

我有一个字符串,我需要找到这个字符串中最后出现的字母数字字符。无论字符串中的最后一个字母数字字符是哪一个,我都需要该索引。为了

text="Hello World!- "
输出将是“d”的索引

text="Hello02, "
输出将是“2”的索引。
我知道我可以用一种“蛮力”的方式,检查每一个字母和每一个数字,然后找到最高的索引,但我确信有一种更整洁的方法,但我找不到

使用正则表达式进行重载

要获取最后一个字母数字字符的索引(
-1
,如果字符串中没有字母数字):


要获取角色本身,请执行以下操作:

String last = str.replaceAll("[^a-zA-Z0-9]*$", "").replaceAll(".(?!$)", "");

这将如预期的那样工作,甚至可以用于几乎所有的Unicode字符和数字:

public static final int lastAlphaNumeric(String s) {
    for (int i = s.length() - 1; i >= 0; i--) {
        char c = s.charAt(i);
        if (Character.isLetter(c) || Character.isDigit(c))
            return i;
    }
    return -1; // no alphanumeric character at all
}

它也比其他答案快得多;)

将字符串转换为字符数组并获取该数组的长度将为您提供任何字符串的最后一个索引…

向后遍历字符串并在找到第一个(即最后一个)数字或字母时停止。这有什么帮助?我不明白的是我应该在.lastIndexOf()[或.indexOf()]中写些什么,让它只打印字母数字字符的索引。如何让它查找字母或数字,而不是特殊字符?发布了一个带有示例实现的答案。@Iverie the lastIndexOf只能搜索特定的固定字符串。它无法搜索正则表达式模式。你必须采用Njol答案中的方法。或者更确切地说,波希米亚人的答案会给你一个一行的解决方案@然后请接受答案(左边绿色勾选)。这不仅会给我们提供一些要点,而且会使问题从未回答的问题列表中消失。OP需要最后一个字母数字字符的索引这相当于string.length(),但中间有一个无用的数组分配。它也不是最后一个字符的索引,而是最后一个字符后的索引。如果在开头或中间有非字母数字字符呢?那么你的索引逻辑就错了。@ADTC你错了。无论字符串是什么,这种逻辑都能完美工作。例如用
“foo,bar”测试,
它给出
6
(这是正确的)。此外,如果没有字母数字仍然有效-索引将为
-1
。(已修复
int
,但谢谢)
public static final int lastAlphaNumeric(String s) {
    for (int i = s.length() - 1; i >= 0; i--) {
        char c = s.charAt(i);
        if (Character.isLetter(c) || Character.isDigit(c))
            return i;
    }
    return -1; // no alphanumeric character at all
}