【问题标题】:Java String keep numeric characters only at the end of a StringJava String 仅在字符串末尾保留数字字符
【发布时间】:2018-11-15 09:25:24
【问题描述】:

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

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

谢谢

我试过了

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

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

我想要的恰恰相反。

【问题讨论】:

  • 您似乎在要求我们为您编写代码。请向我们提供您已经尝试过的方法,以便我们为您提供帮助。
  • 我尝试了以下方法:str.replaceAll("\\d*$", "");但这会将字符串字符保留在最后一个数字之前。我想达到相反的效果
  • 我也试过 str.replaceAll("[^A-Za-z\\s]", "");但这会删除所有数字
  • @IoannaKatsanou 这些都是很好的尝试。编辑您的问题以将它们包含在其中。

标签: java string


【解决方案1】:

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

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

这个输出:

89

【讨论】:

    【解决方案2】:

    您可以使用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
        }
    }
    

    【讨论】:

    • replace and replaceFirst 也一样
    • 但是如果有新行最好使用replace \n
    【解决方案3】:

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

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

    Try it online.

    说明:

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

    然后替换为:

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

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

    【讨论】:

      【解决方案4】:

      我喜欢使用PatternMatcher API:

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

      【讨论】:

      • 你的代码123Test89 会给你12389,但应该是89
      • 嗨,你运行我的代码了吗? 123Test89 提供 89(截至版本 11.0.9.1
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-03
        • 2011-03-07
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        • 2015-06-15
        相关资源
        最近更新 更多