String abc = "||:::|:|::";
如果有两个|
和三个:
出现,它应该返回true
我不确定如何使用“正则表达式”或者它是否是正确的使用方法。 abc
字符串中没有特定的模式。
答案 0 :(得分:0)
假设您正在寻找两个' |'对于三个人来说,一个接一个,一个接一个地说:' 一个跟随另一个。使用以下单个正则表达式。
".*||.*:::.*"
如果您只想查看字符的存在及其与订单无关,请使用String.matches
方法使用带有逻辑AND的两个正则表达式
".*|.*|.*"
".*:.*:.*:.*"
这是cheat sheet for regular expressions。它的学习相当简单。查看文档中的组和量词,以了解上述表达式。
答案 1 :(得分:0)
使用正则表达式会是一个坏主意,特别是如果它们没有特定的顺序。创建一个函数,计算字符在字符串中的次数,并使用:
public int count(String base, char toFind)
{
int count = 0;
char[] haystack = base.toCharArray();
for (int i = 0; i < haystack.length; i++)
if (haystack[i] == toFind)
count++;
return count;
}
String abc = "||:::|:|::";
if (count(abc,"|") >= 2 && count(abc,":") >= 3)
{
//Do some code here
}
答案 2 :(得分:0)
我最喜欢的搜索字符串中字符数的方法是int num = s.length() - s.replaceAll("|","").length();
你可以为这两个字符执行此操作并测试这些字符。
答案 3 :(得分:0)
如果您想在一个正则表达式中测试所有条件,可以使用look-ahead (?=condition)
。
你的正则表达式看起来像
String regex =
"(?=(.*[|]){2})"//contains two |
+ "(?=(.*:){3})"//contains three :
+ "[|:]+";//is build only from : and | characters
现在您可以将其与matches
类似
String abc = "||:::|:|::";
System.out.println(abc.matches(regex));//true
abc = "|::::::";
System.out.println(abc.matches(regex));//false
无论如何,我可以避免使用正则表达式并编写自己的方法来计算字符串中|
和:
的数量,并检查这些数字是否大于或等于2和3.您可以使用来自apache-commons的StringUtils.countMatches
,因此您的测试代码可能看起来像
public static boolean testString(String s){
int pipes = StringUtils.countMatches(s, "|");
int colons = StringUtils.countMatches(s, ":");
return pipes>=2 && colons>=3;
}
或
public static boolean testString(String s){
return StringUtils.countMatches(s, "|")>=2
&& StringUtils.countMatches(s, ":")>=3;
}
答案 4 :(得分:0)
尚未测试过,但这应该可行
Pattern.compile("^(?=.*[|]{2,})(?=.*[:]{3,})$");
整个字符串由?=.*
读取,并检查允许的字符(|
)是否至少出现两次。然后对:
进行相同的操作,只需要至少匹配三次。