Java 如何检查字符串是否包含3位或更多数字

Java 如何检查字符串是否包含3位或更多数字,java,string,Java,String,我目前正在尝试检查字符串是否包含3位或更多数字。如果是,那么它是有效的。我怎样才能修好它 System.out.print("Enter a string: "); //111Hello <-- valid String word = input.nextLine(); boolean numbers = word.matches(".*\\d{3,}"); System.out.println(numbers); System.out.print(“输入字符串:”)//111Hel

我目前正在尝试检查字符串是否包含3位或更多数字。如果是,那么它是有效的。我怎样才能修好它

System.out.print("Enter a string: ");  //111Hello <-- valid
String word = input.nextLine();
boolean numbers = word.matches(".*\\d{3,}"); 
System.out.println(numbers);

System.out.print(“输入字符串:”)//111Hello为什么不在每个字符上设置一个计数器和循环,然后测试它是否是一个数字

这是伪代码:

System.out.print("Enter a string: ");  //111Hello <-- valid
String word = input.nextLine();
int numberOfDigits = countDigits(word, 3);
if (numberOfDigits) >= 3{//...

int countDigits(String val, int max){
    int cnt = 0;
    for(int i =0; i < val.length(); i++){
        char c = val.charAt(i);
        if(Character.isDigit(c){
            cnt++;
        }
        if(cnt == max)return;
    }
    return cnt;
}
System.out.print(“输入字符串:”)//111Hello=3{/。。。
整数位数(字符串值,整数最大值){
int-cnt=0;
对于(int i=0;i

让我们用正则表达式来实现这一点。这似乎不是必需的,但让我们假设这是一个赋值:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FindDigits {
    public static final Pattern DIGIT_PATTERN = Pattern.compile("\\p{Digit}");

    private static int countDigits(String input) {
        final Matcher m = DIGIT_PATTERN.matcher(input);
        int c = 0;
        while (m.find()) {
            c++;
        }
        return c;
    }

    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            final int c = countDigits(args[i]);
            System.out.printf("Input : \"%s\"%nOutput: %s%n", args[i], c >= 3 ? "Valid" : "Invalid");
        }
    }
}

使用正则表达式很容易做到这一点,因为至少包含三个数字的字符串集正是正则表达式设计用来识别的

公共布尔值有三位数(字符串s){
返回s.matches(“.*\\d.\\d.*\\d.”);
}

regex
*\d.*\d.*\d.
将三位数字与前面、后面或中间的任何数字进行匹配。

可能不是最优雅的解决方案,但非常简短明了:

System.out.println(input.replaceAll("\\D","").length() > 2);

我最喜欢kaya3的解决方案

你知道你也可以使用
Matcher#find
搜索字符串吗?目前你只匹配以三个或更多数字结尾的字符串。你的意思是什么?
匹配
-检查整个输入字符串;
查找
-检查部分输入字符串(查找字符串中的正则表达式)但张贴的代码肯定不会创建输出-请考虑发布一个包含错误<代码>布尔数= Word。匹配(“**\d 3,}”)。;
我投了反对票,因为尽管它确实回答了问题,但它并没有显示出正则表达式的良好使用。因为这似乎是一项学习要求,我希望得到一个可扩展的答案。扩展到计算更多数字并不是问题的要求。我不同意简单地编写更复杂的代码以使其更简单是好的更适合将该代码用于更复杂的问题。任何使用正则表达式的代码的复杂性都存在于正则表达式中。例如,计数问题就不那么重要了。如果您需要解析3 x版本字符串或类似内容,而不是数字,会发生什么情况?我不同意。您答案中代码的复杂性来自我们使用一个循环、一个计数器变量和两个库类模式和匹配器。它的复杂性不在您使用的正则表达式
\d
中。如果重复的正则表达式比
\d
更复杂,那么您当然会编写
*(versionstring.*){3}
,但我不认为
*(\d.*){3}
将比我写的更简单或更容易理解。对于这个问题,如果
cnt
等于3,您可以直接中断For循环,以防止重复检查。是的,我认为它的额外细节。我现在添加了它。
System.out.println(input.replaceAll("\\D","").length() > 2);