验证语法

时间:2016-10-05 01:55:48

标签: java string

我试图通过使用给定的语法来检查是否接受给定的字符串。

在控制台中,我收到异常错误:

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

我的错在哪里?

2 个答案:

答案 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循环中的空格字符,因为如果   你确实有空格,你已经不在了   (因为循环前置条件将失败)