java - 字符串条件检查

标签 java regex performance algorithm

我的字符串始终包含 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 个字符,即可以表示空字符串 ""xxxxxx
  • yx* 可以表示 y 后面带有零个或多个 x 的字符串,如 yyxyxx

此正则表达式正在尝试检查字符串是否为

  • 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/

相关文章:

python - 如何比较 python 函数的性能?

performance - AVX 与 SSE : expect to see a larger speedup

java - 如何修复 "error: package android.support.v7.widget does not exist"问题?

java - Eclipse 深色主题与 .groovy 损坏?

regex - RegExp_提取Google Data Studio中第一个点之前的所有内容

javascript - 正则表达式货币格式 - javascript

javascript - 如何知道我的 JS 的哪一部分导致了延迟?

java - 数据库到 GUI 或数据库到对象到 GUI

java - 异步任务的问题

regex - 是否可以在正则表达式的替换中重复捕获的组?