我的字符串始终包含 x 或 y,并且我必须根据以下条件进行验证
- 条件 1:如果所有字符都相同,则返回 true(例如:'xxxxx')
- 条件 2:如果除一个字符外所有内容都相同,则返回 true ( 就像 : 'xxxx')
- 条件3:如果所有字符都相同并且其他字符更多 比一次retun false。 (例如:'xxxyy'//y 存在 2 次)
如何在不编写带有条件的复杂 for 循环的情况下检查这一点。有没有使用 xor 的解决方案,或者如果我将字符串存储为 boolean 值或数字( x=1 或 true y=0 或 false)会有帮助吗?
最佳答案
x*(yx*)?|y*(xy*)?
似乎正在做你想做的事情。如果您不想接受空字符串,可以将第一个 *
更改为 +
。
简而言之:
*
是量词,表示其之前的元素可以出现零次或多次?
表示其前面的元素是可选的|
是 OR 运算符
所以在x*(yx*)
x*
表示零个或多个x
个字符,即可以表示空字符串""
、x
、xx
、xxx
等yx*
可以表示y
后面带有零个或多个x
的字符串,如y
,yx
,yxx
此正则表达式正在尝试检查字符串是否为
xxxx
以及可选的yxxx
部分,yyyy
以及可选的xyyy
部分。
演示
String regex = "x*(yx*)?|y*(xy*)?";
System.out.println("xxx".matches(regex));
System.out.println("xxxy".matches(regex));
System.out.println("xxyx".matches(regex));
System.out.println("xxxyy".matches(regex));
输出:
true
true
true
false
How to check this without writing complex for loop with condition
这取决于您所说的“复杂”的含义。在我看来,这样的循环非常简单
public static boolean check(String text){
long xCounter = 0;
long yCounter = 0;
for (char ch : text.toCharArray()){
if (ch=='x') xCounter++;
else if (ch=='y') yCounter++;
else return false;//non x or y appeared
}
return xCounter < 2 || yCounter < 2;
}
关于java - 字符串条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27368264/