目标:这个代码仅局限于所展示的正规表达式判断,也就是这是一个较单一的正规表达式判断(简易版)。
既然是简易版的,所以若要修改这个正规表达式也是非常容易的,只要将二维数组中的数组修改即可。数组数据依据,该正规表达式所对应的的化简版DFA的状态装换矩阵。
如:S | a | b
0 | 1 | 2
1 | 1 | 2
2 | 1 | 2 所对应的即为{{1,2},{1,2},{1,2}}
效果:
代码:
package compile_design;
import java.util.Scanner; public class regularExpression { public static void main(String[] args){
int [][] array = {{1,2},{1,2},{1,2},{3,3},{4,3}};
System.out.println("正规表达式为:\n ((a|b)*|aa)*b \n");
System.out.println("请输入你要验证的字符串:"); Scanner input = new Scanner(System.in);
String str = input.next();
int length = str.length(); char ch;
int i = 0,j = 0, index = 0;
int t = 1;
int flag =0; while(index < length){
ch=str.charAt(index);//获取字符串首字母
if(ch == 'a')
j = 0; //0 ---a
if(ch == 'b')
j = 1; // 1 ---b
if(ch != 'a' && ch != 'b'){
t = 0;
break;
}
index++;
i = array[i][j];
} flag = i ;
if(flag == 2 && t ==1){
System.out.println("accept,字符串符合该正规表达式\n");
}else{
System.out.println("reject,字符串不符合\n");
}
}
}