我试图通过使用给定的语法来检查是否接受给定的字符串。
在控制台中,我收到异常错误:
Enter your string
aab
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at first.lab3.main(lab3.java:15)
这是我的代码:
package first;
import java.util.Scanner;
public class lab3 {
public static void main(String args[]) {
Scanner str = new Scanner(System.in);
System.out.print("The grammer is : S->AB, A->aA, A->a,B->Bb,B->b\n ");
System.out.print("Enter your string\n ");
char[] charArray = str.nextLine().trim().toCharArray();
int count, flag;
if (charArray[0] == 'a') {
{
flag = 0;
}
for (count = 0; charArray[count] != ' '; count++) {
if (charArray[count] == 'b') {
flag = 1;
continue;
}
if ((flag == 1) && (charArray[count] == 'a')) {
System.out.println("Sring is not accepted");
break;
}
if (charArray[count] == 'a') {
continue;
}
if (flag == 1 && charArray[count] == ' ') {
System.out.println("The string is accepted");
break;
}
}
} else {
System.out.println("String is not accepted ");
}
}
}
我的错在哪里?
答案 0 :(得分:2)
关于错误,您的输入不包含空格。您的循环永远不会退出,直到count++
的错误超出字符串的范围。
选项涉及不使用trim()
并在输入后添加空格或跟随...
语法是:S-> AB
好的,A
后跟B
。
其中A
是一个或多个'a'
A-> aA,A-> a
B
是一个或多个'b'
B-> BB,B-&GT,B
所以,可能的值" ab"," aaaab"," abbb"," aaaabbbb"。
所有这些代码都可以简单地压缩成正则表达式。 a+b+
,或者"一个或多个' a'然后是一个或多个''""。
public static void main(String args[]) {
Scanner str = new Scanner(System.in);
System.out.print("The grammer is : S->AB, A->aA, A->a,B->Bb,B->b\n ");
System.out.print("Enter your string\n ");
boolean accepted = str.nextLine().matches("a+b+");
if (!accepted) {
System.out.println("String is not accepted ");
} else {
System.out.println("The string is accepted");
}
}
答案 1 :(得分:1)
如果你有
resource_filename
然后你怎么能
from pkg_resources import resource_filename
filepath = resource_filename('package1', 'resources/thefile')
在你的for循环中?
根据@MatiasCicero评论
你无法检查for循环中的空格字符,因为如果 你确实有空格,你已经不在了 (因为循环前置条件将失败)