2016-10-05 74 views
-2

我想检查一个给定的字符串是否被利用给定的语法接受。验证语法

在控制台中,我得到异常错误是这样的:

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 "); 
    } 
} 
} 

哪里是我的错?

+4

“不工作”是什么意思?它不是编译,抛出异常,还是给出不正确的结果? – resueman

+0

“这是行不通的”......请指出是否编译错误是不是在做你想做的事情? – brld

+3

请仔细阅读过[“我怎么问一个很好的问题”(HTTP://计算器。com/help/how-to-ask),这确实很重要,因为你已经阅读过这些内容,然后相应地更新你的问题:你要求其他人花时间帮助你,所以花时间确保它是你自己也是一个很好的问题。 –

回答

2

至于错误,你输入不包含空格。您的循环从不退出,直到出现count++超出字符串范围的错误。

方案涉及不使用trim()和你输入之后添加一个空格或跟着我。

的语法为:S-> AB

好了,让后面AB

哪里A是一种或多种'a'

A-> AA,A->一个

而且B是一种或多种'b'

B-> BB, B-> b

所以,可能的值 “AB”, “AAAAB”, “AB | BB”, “aaaabbbb”。

所有这些代码可以简单地浓缩成正则表达式。 a+b+,或“一个或多个”a“,后跟一个或多个”b“”。

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"); 
    } 
} 
+0

谢谢它的作品! = D –

+1

欢迎。显然,如果你改变语法,你可能需要使用另一种方法 –

+1

你能告诉我为什么我的代码无法正常工作吗?请。 –

1

如果你有

for(count=0;charArray[count]!=' ';count++) 

那么你怎么能在你的for循环有

if(flag==1 && charArray[count]==' '){ 

按@MatiasCicero评论

你无法检查里面的for循环空格字符,因为如果 你有一个空格字符,你就可以离开已经是循环 的(因为循环的前提条件会失败)

+0

我已经更新了循环。但仍有问题 for(count = 1; charArray [count-1]!=''; count ++) –

+0

什么是“问题”? –

+0

@AritraPaul答案试图表达的是,你不能检查for循环中的空格字符,因为如果你确实有一个空格字符,你已经不在循环中了(因为循环前提条件会失败) –