csp:URL (java)利用正则表达式完美解决

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		String sint="\\d{1,}";//整数正则表达式
		String sstr="[a-z[A-Z][0-9][.][-][_]]{1,}";//字符串正则表达式
		String spath="[a-z[A-Z][0-9][.][-][_][/]]{1,}";//路径正则表达式
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		String[][] str=new String[n][2];// URL映射规则,str[][0]规则str[][1]参数
		String[] strr=new String[n];//规则左边字符串按斜杆分割数组
		int m=in.nextInt();
		String[] strp=new String[m];
		for(int i=0;i<n;i++)
		{
			str[i][0]=new String(in.next());
			str[i][1]=new String(in.next());
			String[] arry=str[i][0].split("/");//规则左边字符串按斜杆分割数组
			strr[i]="/";//匹配正则字符串
			for(int j=1;j<arry.length;j++)
			{
				if(arry[j].equals("<int>"))
					strr[i]=strr[i].concat(sint);//正则表达式拼接
				else if(arry[j].equals("<str>"))
					strr[i]=strr[i].concat(sstr);
				else if(arry[j].equals("<path>"))
					strr[i]=strr[i].concat(spath);
				else
					strr[i]=strr[i].concat(arry[j]);
				if(j!=arry.length-1)
				strr[i]=strr[i]+"/";
				else if(str[i][0].toCharArray()[str[i][0].length()-1]=='/')
				strr[i]=strr[i]+"/";
				
			}
			//System.out.println(strr[i]);
		}
		for(int i=0;i<m;i++)
		{
			strp[i]=in.next();
			int flag=0;
			for(int j=0;j<n;j++)
			{
				if(strp[i].matches(strr[j])==true)//匹配成功
				{
					flag=1;
					System.out.print(str[j][1]);
					String[] arry1=str[j][0].split("/");
					String[] arry2=strp[i].split("/");
					for(int k=1;k<arry1.length;k++) {
						if(arry1[k].equals("<int>")) {
							System.out.print(" "+Integer.parseInt(arry2[k]));
						}
						else if(arry1[k].equals("<str>"))
							System.out.print(" "+arry2[k]);
						else if(arry1[k].equals("<path>"))
						{
							System.out.print(" ");
							int indexsite=strp[i].indexOf(arry2[k-1]+"/");
							System.out.print(strp[i].substring(indexsite+arry2[k-1].length()+1));
							break;
						}
						
					}
					if(flag==1)
					System.out.println();
					break;
				}
			}
			if(flag==0)
				System.out.println("404");
		}

	}

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里东君~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值