packageutil;importjava.util.regex.Matcher;importjava.util.regex.Pattern;/*** 工具类
* 1.3,完美
*@authorxanwidtf@foxmail.com
**/
public classutil {//初始化渲染网格的方法
public staticString[][] constructGrid(String[][] s,String[][] b){
String[][] small=s; //道路网格
String[][] big=b; //渲染网格
for(int i=0;i
{for(int j=0;j
{if(small[i][j]=="[R]")
big[i*2+1][j*2+1]="[R]";
}
}returnbig;
}/*** 给输入的道路网格的连通性定义进行格式检查,
* 是否包含英文字母和汉字
*@params
*@returntrue为包含,false为不包含*/
public static booleancontainsABC(String s){
Pattern p= Pattern.compile("^[A-Za-z0-9\u4e00-\u9fa5]+$");//定义规则 ,该规则为大小写字母
Matcher m =p.matcher(s);returnm.find();
}/*** 判断是否含有特殊字符",;"和空格3个不包含在内
*
*@params
*@returntrue为包含,false为不包含*/
public static booleanisSpecialChar(String s) {
String regEx= "[_`~!@#$%^&*()+=|{}':'\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\n|\r|\t";
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(s);returnm.find();
}/*** 通过正则表达式的方式获取字符串中特定字符的个数
*@paramtext 指定的字符串
*@return指定字符的个数*/
public static intpattern(String command,String str) {//根据指定的字符构建正则
Pattern pattern =Pattern.compile(str);//构建字符串和正则的匹配
Matcher matcher =pattern.matcher(command);int count = 0;//循环依次往下匹配
while (matcher.find()){ //如果匹配,则数量+1
count++;
}returncount;
}/*** 匹配特定规则
*@paramcommand
*@paramstr
*@return符合即返回true*/
public static booleanpatternMain(String command,String str) {//根据指定的字符构建正则
Pattern pattern =Pattern.compile(str);//构建字符串和正则的匹配
Matcher matcher =pattern.matcher(command);returnmatcher.matches();
}/*** 网格联通指令格式检测
*@params
*@return正确返回true*/
public static booleancommandCheck(String s){boolean result=false;int num=pattern(s,";");
String[] arr=new String[num+1];if(!util.containsABC(s)&&!util.isSpecialChar(s)){ //s只能为
if(num>0)
{
arr=s.split(";");//System.out.println(arr.length);//调试输出
if(arr.length>0&&arr.length>num){for(int i=0;i
{if(arr[i]==null||!arr[i].equals("")){ //判断不允许出现空值
result=patternMain(arr[i],"\\d+,\\d+ \\d+,\\d+");
}else{//System.out.println("出现空值");//调试输出
return false; //如果用result=false,有可能在for循环后变为true
}
}
}else{return false;
}
}else{
result=patternMain(s,"\\d+,\\d+ \\d+,\\d+");
}
}else{return false;
}returnresult;
}/*** 联通性检测
*@return
*/
public static boolean Maze(String s,int m,intn){boolean result=true;
String str=s.replaceAll("\\D+","");//System.out.println("连通性测试:"+str);//调试输出
for(int i=0;i
{int x=Integer.parseInt(String.valueOf(str.charAt(i))); //0
int y=Integer.parseInt(String.valueOf(str.charAt(i+2))); //2
int xx=Integer.parseInt(String.valueOf(str.charAt(i+1))); //1
int yy=Integer.parseInt(String.valueOf(str.charAt(i+3))); //3
if(x==y||xx==yy){//System.out.println(" "+x+y+" "+xx+yy);//调试输出
if(x
result=true;
}else{
result=false;
}
}else{return false;
}
}returnresult;
}/*** 通过提取连通性指令的有效数值,渲染网格
*@params
*@paramarr
*@return返回一个二维数组*/
public staticString[][] drawGrid(String s,String[][] arr){
String[] temp=s.split(";");
String[] Temp=newString[temp.length];for(int j=0;j
{
Temp[j]=temp[j].replaceAll("\\D+","");
}for(int i=0;i
{int k=0;int x = 0,y = 0;if(Temp[i].charAt(k)==Temp[i].charAt(k+2)){
x=Integer.parseInt(String.valueOf(Temp[i].charAt(k)))*2+1;
y=Integer.parseInt(String.valueOf(Temp[i].charAt(k+1)))*2+1+1;//System.out.println("xy"+x+" "+y);//调试输出
arr[x][y]="[R]";
}else if(Temp[i].charAt(k+1)==Temp[i].charAt(k+3)){
x=Integer.parseInt(String.valueOf(Temp[i].charAt(k)))*2+1+1;
y=Integer.parseInt(String.valueOf(Temp[i].charAt(k+1)))*2+1;//System.out.println("xy"+x+" "+y);//调试输出
arr[x][y]="[R]";
}
}returnarr;
}/*** 打印输出数组
*@paramarr*/
public static voidprintGrid(String[][] arr){for(int i=0;i
{for(int j=0;j
{
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}