Java 如何检查每个大写字母后的字母是否相同?

Java 如何检查每个大写字母后的字母是否相同?,java,regex,Java,Regex,任务: 编写一个函数,该函数接收一个表达式,该表达式仅由子句('a','a','b','b','c','c')作为字符串或字符数组组成,并返回一个表示表达式有效或无效的布尔值 示例:输入-输出 AaBb-正确 BCAacb-正确 BCcAab-正确 阿卡巴卡-真的 AabB-错误 BCAcaB-错误 这是我的代码: public class Main { private static Scanner scanner = new Scanner(System.in); publi

任务:

编写一个函数,该函数接收一个表达式,该表达式仅由子句('a','a','b','b','c','c')作为字符串或字符数组组成,并返回一个表示表达式有效或无效的布尔值

示例:输入-输出

  • AaBb-正确

  • BCAacb-正确

  • BCcAab-正确

  • 阿卡巴卡-真的

  • AabB-错误

  • BCAcaB-错误

这是我的代码:

public class Main {
private static Scanner scanner = new Scanner(System.in);

public static void main(String[] args) {
    System.out.println("Enter phrase");
    String inputExpression = scanner.nextLine();

    //checkPhraseTrueOrFalse(inputPhrase);
    System.out.println(isValidExpression(inputExpression));
}

public static boolean isValidExpression(String expression) {
    String[] splitInputExpressionExp = expression.split("@", 2);
    for (String s : splitInputExpressionExp) {
        if (s.contains("Aa") || s.contains("Bb") || s.contains("Cc")) {
            if ((!s.contains("Aa") || !s.contains("Bb") || !s.contains("Cc"))){
                return true;
            }
        }
    }
    return false;
}

如何修改isValidExpression方法?

您可以重复匹配0+大写字符,并重复匹配Ab Bb或Cc后跟可选小写字符

要防止部分匹配,可以使用单词边界
\b

\b(?:[ABC]*(?:Aa|Bb|Cc)[abc]*)+\b
模式匹配:

  • \b
    防止部分匹配的单词边界
  • (?:
    非捕获组
    • [ABC]*
      匹配可选大写字符
      A
      B
      C
    • (?:Aa | Bb | Cc)
      匹配1个备选方案
    • [abc]*
      匹配可选的小写字符
      a
      b
      c
  • )+
    关闭组并重复1+次
  • \b
    单词边界

在Java中使用双反斜杠

String regex = "\\b(?:[ABC]*(?:Aa|Bb|Cc)[abc]*)+\\b";

我看不到正则表达式的任何用途。为什么这个问题被标记为[regex]?你是在寻找一个正则表达式解决方案还是一个错误的标签?是的,我在寻找正则表达式解决方案。像这样<代码>\b(?[ABC]+[ABC]+)+\b@第四只鸟将为“BBa”返回true。这个问题不包含这个例子,但据我所知,这不是一个有效的输入(所有有效的例子都包含相同数量的大写和小写字母,每个大写字母都有一个匹配的小写字母),我很清楚这个问题。我不理解需要细节或明确性作为投票接近这个问题的原因。