【问题标题】:Java - Check whether a string contains the same digit or notJava - 检查字符串是否包含相同的数字
【发布时间】:2016-02-10 07:05:30
【问题描述】:

我有一个int,例如:

151515
1
1111111
4848484
111
888

我需要测试/检查数字是否仅包含 1,有效示例:

1
11111
1111111111
11

无效示例:

88888888888
8885555
4747
7
889

有什么建议吗? 可能有regex?或者有一个没有正则表达式的快速解决方案,并将值保留为 int 而不将其解析为 String。

【问题讨论】:

    标签: java regex string validation


    【解决方案1】:

    你可以这样试试:

    String str = String.valueOf(nums);
    
    if (str.replaceAll("1", "").length() == 0) {
        // it contains all ones
    } 
    

    【讨论】:

      【解决方案2】:

      匹配的int 数量非常有限,所以你可以这样做

      if (i == 1 || i == 11 || i == 111 || ..... )
      

      编译器会告诉你何时停止(“literal too large for int”)。

      【讨论】:

        【解决方案3】:

        怎么样:

        public boolean isAllOnes(int num) {
            for (int powerOf10 = 10; ; powerOf10 *= 10) {
                if (num * 9 == powerOf10 - 1) {
                    return true;
                }
                if (powerOf10 > Integer.MAX_VALUE / 10) {
                    return false;
                }
            }
        }
        

        这不涉及正则表达式或转换为字符串,但我不知道它是否真的比其他答案快。 (Thilo 的蛮力解决方案可能是最快的。)

        【讨论】:

          【解决方案4】:

          你可以这样试试:

          String str = "1111111";
          System.out.println(str.matches("^[1]+$")); 
          

          IDEONE DEMO

          【讨论】:

            【解决方案5】:

            答案概念 1.首先将int转换为字符串。 2.然后试试这个正则表达式:

            "^[1]*$"
            

            3.通过使用java regexp 模式匹配 传递字符串和模式

            【讨论】:

            • 这将匹配一个空的String。您可以将 * 替换为 + 以防止这种情况发生。
            • @Titus 如果他将一个整数转换为一个字符串,它就不可能是空的。
            • @ajb 哦,是的,你是对的。我没有考虑到这一点。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-20
            • 2014-12-27
            相关资源
            最近更新 更多