Java 检查字符串是否使用规定的规则集形成
检查字符串是否使用规定的规则集形成。使用以下规则生成: a.字符串以“a”开头 b.每个“a”后面都跟不上任何内容或“a”或“bb” c.每个“bb”后面都跟不上任何内容或“a” 我尝试了以下代码: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
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'?