[英]How to check if a String contains 3 digits or more
我目前正在嘗試檢查字符串是否包含 3 位或更多位。 如果是,那么它是有效的。 我該如何解決?
System.out.print("Enter a string: "); //111Hello <-- valid
String word = input.nextLine();
boolean numbers = word.matches(".*\\d{3,}");
System.out.println(numbers);
Output:
Invalid
這里有些例子:
輸入: Hello244
Output: Valid
輸入: 3Hello
Output: Invalid
輸入: 6Hello2Hello5
Output: Valid
使用正則表達式很容易做到這一點,因為包含至少三位數字的字符串集是一種正則語言- 正是正則表達式旨在識別的內容。
public boolean hasThreeDigits(String s) {
return s.matches(".*\\d.*\\d.*\\d.*");
}
正則表達式.*\d.*\d.*\d.*
將三位數字與之前、之后或之間的任何內容匹配。
為什么不設置一個計數器並遍歷每個字符,然后測試它是否為數字?
這是偽代碼:
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;
}
https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isDigit(char)
讓我們用正則表達式來做這件事。 這似乎不是必需的,但讓我們假設這是一個作業:
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");
}
}
}
這個答案假設輸入是命令行上的一組字符串。 它定義了一個 function 來計算由單個數字組成的模式的出現次數。 它當然可以在 3 時停止計數。
我主要發布這個是因為Matcher.find
經常被忽視,因為它沒有在String
中定義的便利方法。 它通常使閱讀正則表達式變得更加容易,因為您不需要定義您不需要的內容。 否則你會被正則表達式字符串困住,例如".*\\d.*\\d.*\\d.*"
這有點可怕並且不能很好地擴展。
除了 while 循環,您還可以在 Java 運行時的更高版本上使用m.results().count()
。 在這種情況下,單線將是:
long count = Pattern.compile("\\p{Digit}").matcher(input).results().count();
也許不是最優雅的解決方案,但非常簡短明了:
System.out.println(input.replaceAll("\\D","").length() > 2);
我最喜歡kaya3的解決方案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.