Если вы хотите протестировать все условия в одном регулярном выражении, вы можете использовать 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. Вы можете использовать StringUtils.countMatches
от apache-commons так что ваш тестовый код может выглядеть
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;
}
Вы имеете в виду, что он должен возвращать 'true', если он содержит' || ::: ', или если он содержит' || 'и' ::: 'независимо от порядка или позиции (' ::: || 'или ': ||: | :::' ...)? – MadProgrammer
true, если он содержит | и: независимо от позиции – user3413152
Is '': |: |: "' также правильно (он содержит два '|' и три ':')? – Pshemo