4 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用正則表達(dá)式很容易做到這一點(diǎn),因?yàn)榘辽偃齻€(gè)數(shù)字的字符串集是正則語(yǔ)言- 正是正則表達(dá)式旨在識(shí)別的語(yǔ)言。
public?boolean?hasThreeDigits(String?s)?{ ????return?s.matches(".*\\d.*\\d.*\\d.*"); }
正則表達(dá)式.*\d.*\d.*\d.*
將三個(gè)數(shù)字與其之前、之后或之間的任何內(nèi)容相匹配。

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
為什么不使用計(jì)數(shù)器并循環(huán)每個(gè)字符,然后測(cè)試它是否是數(shù)字?
這是偽代碼:
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)

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
讓我們用正則表達(dá)式來(lái)做到這一點(diǎn)。這似乎并不是真正需要的,但我們假設(shè)這是一個(gè)作業(yè):
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");
}
}
}
該答案假設(shè)輸入是命令行上的一組字符串。它定義了一個(gè)函數(shù)來(lái)計(jì)算由單個(gè)數(shù)字組成的模式的出現(xiàn)次數(shù)。當(dāng)然也可以到3就停止計(jì)數(shù)。
我主要發(fā)布這個(gè),因?yàn)镸atcher.find它經(jīng)常被忽視,因?yàn)樗鼪](méi)有在String. 它通常使閱讀正則表達(dá)式變得更加容易,因?yàn)槟恍枰x您不需要的內(nèi)容。否則,您將陷入正則表達(dá)式字符串之類的困境,".*\\d.*\\d.*\\d.*"這些字符串有點(diǎn)可怕并且無(wú)法很好地?cái)U(kuò)展。
除了 while 循環(huán)之外,您還可以m.results().count()在更高版本的 Java 運(yùn)行時(shí)上使用。在這種情況下,一句臺(tái)詞將是:
long count = Pattern.compile("\\p{Digit}").matcher(input).results().count();

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
也許不是最優(yōu)雅的解決方案,但非常簡(jiǎn)短明了:
System.out.println(input.replaceAll("\\D","").length() > 2);
我最喜歡kaya3的解決方案
添加回答
舉報(bào)