Java字符串仅在字符串的末尾保留数字字符

时间:2018-11-15 09:25:25

标签: java string

什么是正则表达式,所以我只能在字符串的末尾保留LAST数字? 例如

Test123 -> 123
T34est56 -> 56
123Test89 -> 89

谢谢

我尝试过

str.replaceAll("[^A-Za-z\\s]", "");,但这会删除字符串的所有数字。 我也尝试过str.replaceAll("\\d*$", "");,但这会返回以下内容:

Test123 -> Test
 T34est56 -> T34est
 123Test89 -> 123Test

我要相反。

5 个答案:

答案 0 :(得分:2)

获取行中最后一个整数的组,然后用该组替换字符串似乎可行:

    String str = "123Test89";
    String result = str.replaceAll(".*[^\\d](\\d+$)", "$1");
    System.out.println(result);

这将输出:

89

答案 1 :(得分:0)

您可以使用replaceFirst()删除所有内容(.*),直到最后一个非数字(\\D):

s = s.replaceFirst(".*\\D", "");

完整示例:

public class C {
    public static void main(String args[]) {
        String s = "T34est56";
        s = s.replaceFirst(".*\\D", "");

        System.out.println(s); // 56
    }
}

答案 2 :(得分:0)

我喜欢使用PatternMatcher API:

Pattern pattern = Pattern.compile("[1-9]*$");
Matcher matcher = pattern.matcher("Test123");
if (matcher.find()) {
    System.out.println(matcher.group()); // 123
}

答案 3 :(得分:0)

您可以使用这样的正则表达式:

String result = str.replaceFirst(".*?(\\d+$)", "$1");

Try it online.

说明:

  • .*:任意数量的前导字符
  • ? :(可选)。这可以确保其后的正则表达式部分((\\d+$)的优先级高于.*。如果没有?,则每个测试用例将仅返回最后一位数字(即123Test89将返回9而不是89)。
  • \\d+:一位或多位数字
  • $:位于字符串的结尾
  • (...):在捕获组中捕获

然后替换为:

  • $1:第一个捕获组的匹配项(即尾随数字)

为了更清楚一点,您可以在正则表达式中添加前导^"^.*?(\\d+$)",尽管实际上并没有必要,因为.*已经匹配了每个前导字符。

答案 4 :(得分:-3)

我认为使用/.*?(\d+)$/,它将起作用。