Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查字符串是否使用规定的规则集形成_Java_String - Fatal编程技术网

Java 检查字符串是否使用规定的规则集形成

Java 检查字符串是否使用规定的规则集形成,java,string,Java,String,检查字符串是否使用规定的规则集形成。使用以下规则生成: a.字符串以“a”开头 b.每个“a”后面都跟不上任何内容或“a”或“bb” c.每个“bb”后面都跟不上任何内容或“a” 我尝试了以下代码: public static void main(String[] args) { Scanner scn = new Scanner(System.in); String str = scn.nextLine(); boolean b = false; if

检查字符串是否使用规定的规则集形成。使用以下规则生成:

a.字符串以“a”开头

b.每个“a”后面都跟不上任何内容或“a”或“bb”

c.每个“bb”后面都跟不上任何内容或“a”

我尝试了以下代码:

public static void main(String[] args) {
    
    Scanner scn = new Scanner(System.in);
    String str = scn.nextLine();
    boolean b = false;
    if (str.charAt(0) == 'a') {
        if (str.charAt(1) == 'b') {
            if (str.charAt(2) == 'b') {
                b = true;
            } else
                b = false;

        } else
            b = false;
    } else
        b = false;
    System.out.println(b);
}
代码正确吗。。。???
对于input=aab,输出应为false;对于input=abba,输出应为true。

如果允许使用正则表达式,则模式
(a+(bb)+
匹配符合规则的字符串(而不匹配不符合规则的字符串)

否则,如果没有某种循环,您的方法可能无法工作,因为字符串
aaaaaaaaaaaaaaa
与模式匹配

考虑下面的方法,它应该处理它

private static boolean stringMatches(String s) {
  // Handle empty and null cases first.
  if (s == null || s.isEmpty()) return false;

  // So long as the string continues to match the pattern, keep stripping
  // characters from it until it is empty. If you reach empty, it matches the pattern.
  while (! s.isEmpty()) {
    // If the first character isn't 'a', we don't match; return false.
    if (s.charAt(0) != 'a') {
      return false;
    }

    // Check for abb, if so strip all of that, otherwise strip just the a
    if (s.length() >= 3 && "abb".equals(s.substring(0,3)) {
      s = s.substring(3);
    } else {
      s = s.substring(1);
    }
  }
  // Reached empty string, return true.
  return true;
}

这是递归方法:

public static boolean checkAB(String s) 
{
    if (s.length()==0) 
        return true;
    if (s.charAt(0) != 'a')
        return false;
    if (s.length() >= 3 && "abb".equals(s.substring(0,3)))
        return checkAB(s.substring(3));
    else
        return checkAB(s.substring(1));
}
这是我的片段:

def checkAB(str):
    if len(str) == 0:
        return True
    if len(str) == 1:
        if str == 'a':
            return True
        else:
            return False
    if str[0] == 'a':
        return checkAB(str[1:])
    elif str[0] == 'b':
        if str[1] == 'b':
            return checkAB(str[2:])
        else:
            return False
    else:
        return False
尝试读取布尔值并以字符串“true”或“false”打印输出。在我的例子中,我犯了一个错误,直接返回布尔值

还有一个片段:

def checkAB(str):
    if (len(str) == 0):
        return True

    if (str[0] == 'a'):
        if (len(str[1:]) > 1 and str[1:3] == 'bb'):
            return checkAB(str[3:])
        else:
            return checkAB(str[1:])
    else:
        return False

我希望这对您有所帮助。

这个问题属于这里:您是否尝试运行代码?你的结果是什么?对于上面的两个测试用例,它工作得很好,但是当我在一个在线编码网站上尝试这段代码时,它会落下一些测试用例,我不知道为什么。在线判断是什么?此外,如果字符串仅为“a”,则代码将给出nullpointer,您需要遍历整个字符串,而不仅仅是前3个字符。Ex“abbaaabba”。是的,你是对的,我应该使用循环,当我看到这两个测试用例并试图为其编码时,我没有想到。这如何确保
'a'后面没有任何内容或一个'a'
每个“bb”后面都没有任何内容或一个'a'?