2016-10-05 105 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循環中的空格字符,因爲如果你確實有一個空格字符,你已經不在循環中了(因爲循環前提條件會失敗) –