【发布时间】:2016-08-03 10:12:20
【问题描述】:
我想要一个 if 条件,仅当字符串包含多于四位数字时才为真,如果字符串中的数字少于四位,则为假,我尝试过像 /\d{4}/ 这样的正则表达式,需要帮助
【问题讨论】:
-
@kruti 您可能的重复根本不是重复
-
“没有运气”不足以描述您遇到的问题。
我想要一个 if 条件,仅当字符串包含多于四位数字时才为真,如果字符串中的数字少于四位,则为假,我尝试过像 /\d{4}/ 这样的正则表达式,需要帮助
【问题讨论】:
public static void main(String[] args) {
String toCheck1 = "assg3asgasgas123aassag3";
String toCheck2 = "aasdasfasfs";
System.out.println(String.format("more then 4 number in \"%s\" - %s", toCheck1, moreThen4NumbersInString(toCheck1)));
System.out.println(String.format("more then 4 number in \"%s\" - %s", toCheck2, moreThen4NumbersInString(toCheck2)));
}
private static boolean moreThen4NumbersInString(String string) {
int numberOfNumbers = 0;
for (int i = 0; i < string.length(); i++) {
if (Character.isDigit(string.charAt(i))) {
numberOfNumbers++;
if (numberOfNumbers > 4) {
return true;
}
}
}
return false;
}
输出:
“assg3asgasgas123aassag3”中的数字超过 4 - 超过 4 “aasdasfasfs”中的数字 - 错误
【讨论】:
以下模式将匹配至少包含 4 位数字的字符串:
(.*?\d){4, }
【讨论】:
将string 转换为char[]。 for-循环遍历数组的所有元素并计算int count 中的位数。就这么简单
【讨论】:
【讨论】:
\d.*? 似乎更有效
(?:\d.*?){4,} 模式并不意味着任何——没有^ 锚
给你一个样本:
package com.company.misc;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexSample {
public static void main(String[] args) {
String regex = "(.*?\\d){4,}";
//(.*?\d){4, } do not use this, compilation error
String input = "test2531";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
boolean isMatched = matcher.matches();
System.out.println(isMatched);
}
}
希望我已经为您的用例提供了示例。
【讨论】: