一道关于改写url的题
昨天在这边请教了大神们后,收益匪浅~感觉一道题学会了好多东西。所以我又来了,想和大家讨论一下。不是很难的题目,因为是原文是英语,我可能翻译有错误的地方,请多包涵。
你是一个http服务器,但你只负责过滤和转发请求到你的应用服务器上。这意味着你得转换url
请改写url遵循以下规则:
1)/member/$1 变为 member?id=$1
- /member/250 变为 /member?id=250
- $1 只可能是一个数字
2)/school/$1/$2 变为 /school?state=$1&city=$2
- $2 可以为空
- /school/ar/jonesboro 变为 /school?state=ar&city=jonesboro
3) 如果以上两条没有碰到,返回原地址就可以了
以下的interface可帮助你开始
/**
* Rewrite an incoming URL
*
* @param url requested URL
* @return rewritten URL
*/
看完题目后,我首先纠结的是我是不是要写一个server还是一个简单的string转换程序。其次纠结的就是java 的main return type只能是void,那我要怎么return 改好后的url呢?
结果我写的程序就是通过args把url拿进来,用'/'split后,很傻瓜的把该改的改好,重新拼回去,然后打出来。
我原本想通过 pattern 和 matcher 来直接replace上述条件中的string,但是虽然正则表达式可以做到搜索"member/"+""-?\\d+(\\.\\d+)?"但是我却找不到只替换"member/"为"member?id="而保持其后数字不变的方法。如果把"member/"+""-?\\d+(\\.\\d+)?"放到一个buffer里再在这个buffer里找到member/再替换,感觉好像不是很值得。
--------------------编程问答-------------------- 你方法都写到main函数里面,当然没有返回值了。。
/**
* Rewrite an incoming URL
*
* @param url requested URL
* @return rewritten URL
*/
package main;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class rewrite {
public static void main(String[] args) {
String url = args[0];
String reurl = "";
if(url.charAt(0)=='/')
{
reurl="/";
}
String[] result = url.split("/");
int i=0;
for(String s : result){
if(result[i].equals("member") && result[i+1].matches("-?\\d+(\\.\\d+)?"))
{
result[i]="member?id=";
}
else if(result[i].equals("school") && result[i+1].matches("[a-zA-Z]+"))
{
result[i]="school?state=";
if(result[i+2].matches("[a-zA-Z]+") && (!result[i+2].equals("member")))
{
result[i+2]="&city="+result[i+2];
}
}
else if(i-2 >=0 && result[i].matches("[a-zA-Z]+") && result[i-1].equals("school?state=") )
{}
else if(i-1>= 0 && result[i].matches("[a-zA-Z]+") &&result[i-2].equals("school?state=") )
{}
else
{
result[i]=result[i]+"/";
}
reurl=reurl+result[i];
i++;
}
if(url.charAt(url.length() - 1)!='/' && reurl.charAt(reurl.length()-1)=='/')
{
reurl = reurl.substring(0,reurl.length() - 1);
}
System.out.println(reurl);
}
}
写到普通方法里面不就有返回值了?
至于url替换,直接用正则定下格式替换特定位置就可以。、
最后,转发url请求也得new 一个URL把。 --------------------编程问答--------------------
怎么用正则表达式定下格式替换指定位置呀?是用pattern吗?
真对不起,因为我没有java经验,全靠baidu google在自己摸索
补充:Java , Java相关