如何从字符串中获取最后一个整数"56",如ra12ke43sh56?

Rak*_*esh 8 java

如何从字符串中获取最后一个整数"56",如ra12ke43sh56?

我必须将下一个值修改为ra12ke43sh57,所以我想得到最后一个整数值.

Boz*_*zho 23

StringBuilder sb = new StringBuilder();
for (int i = str.length() - 1; i >= 0; i --) {
    char c = str.charAt(i);
    if (Character.isDigit(c)) {
        sb.insert(0, c);
    } else {
        break;
    }
}
String result = sb.toString();
Run Code Online (Sandbox Code Playgroud)

要么

Pattern p = Pattern.compile("[0-9]+$");
Matcher m = p.matcher(str);
if(m.find()) {
    result = m.group();
}
Run Code Online (Sandbox Code Playgroud)

然后 Integer.parseInt(result)

  • 为什么不用'[0-9] + $'将RE固定到最后? (4认同)

pol*_*nts 5

也许您想要这样的东西(另请参阅 ideone.com):

static String nextId(String id) {
    String[] parts = id.split("(?=\\d+$)", 2);
    final int L = parts[1].length();
    final int num = Integer.parseInt(parts[1]) + 1;
    return parts[0] + String.format("%0"+L+"d", num);
}
public static void main(String[] args) {
    String[] tests = {
        "jamesBond007", "ra12ke43sh57", "-42", "x888y999", "00000"
    };
    for (String test : tests) {
        System.out.println(nextId(test));
    }
    // prints "jamesBond008", "ra12ke43sh58", "-43", "x888y1000", "00001"
}
Run Code Online (Sandbox Code Playgroud)

怎么运行的

这里有几件事在起作用:

  • 使用String.split(String regex, int limit), 仅限 2 部分
    • parts[0]是静态前缀,可能为空
    • parts[1]是字符串末尾的数字序列
  • 使用零宽度匹配正向前瞻进行拆分
    • (?=\d+$)匹配一个可以匹配的位置\d+$
      • 即数字字符\d字符类
      • ...重复一次或多次+
      • ...直到弦锚的末端$
  • 用于String.format保留任何前导零
    • 像这样的格式%05d意味着:
      • 0:用前导零填充
      • 5:宽度为5
      • d:十进制整数转换

相关问题

关于环视:

参考