解析门户网站URL

时间:2013-07-02 09:30:24

标签: java string parsing

你如何将URL的粗体部分解析为字符串?只有我想到的方法是疯狂的子串和indexOf,这对我来说似乎不是正确的方式......而且我并不是特别强大在regexps所以任何帮助表示赞赏。

http://url.com/portal/classic/showcase?portal%3AwindowState=normal&navigationalstate=JBPNS_rO0ABXelAARkZW1vAAAAAQAHdG9vbEJhcgAQX2pzZkJyaWRnZVZpZXdJZAAAAAEAIS9yaWNoZmFjZXMvY29tcG9uZW50LXNhbXBsZS54aHRtbAAcamF2YXgucG9ydGxldC5mYWNlcy5WaWV3TGluawAAAAEABHRydWUABHNraW4AAAABAAdibHVlU2t5AAZzYW1wbGUAAAABAAd0b29sQmFyAAdfX0VPRl9f&portal%3AcomponentId=f708c77a-5730-44dd-b1f8-59215adca680&portal%3AresourceID= /images/icons/create_doc.gif &安培;门%3AcacheLevel = PAGE&安培;门%3Atype =资源&安培;门%3AportletMode =视图“

P.S。它是一个门户URL,但它并不重要,因为我只有JDK而没有portlet工具供我使用:)

2 个答案:

答案 0 :(得分:2)

如果您接受黑客攻击,则无需在regexp中保持强大。

substringindexOf s:

String s = "http://url.com/portal/classic/showcase?portal%3AwindowState=normal&navigationalstate=JBPNS_rO0ABXelAARkZW1vAAAAAQAHdG9vbEJhcgAQX2pzZkJyaWRnZVZpZXdJZAAAAAEAIS9yaWNoZmFjZXMvY29tcG9uZW50LXNhbXBsZS54aHRtbAAcamF2YXgucG9ydGxldC5mYWNlcy5WaWV3TGluawAAAAEABHRydWUABHNraW4AAAABAAdibHVlU2t5AAZzYW1wbGUAAAABAAd0b29sQmFyAAdfX0VPRl9f&portal%3AcomponentId=f708c77a-5730-44dd-b1f8-59215adca680&portal%3AresourceID=/images/icons/create_doc.gif&portal%3AcacheLevel=PAGE&portal%3Atype=resource&portal%3AportletMode=view";
String s1 = s.substring(s.indexOf("resourceID=") + "resourceID=".length());
System.out.println(s1.substring(0, s1.indexOf('&')));

正则表达式

Pattern pat =  Pattern.compile("resourceID=(.*?)&");
Matcher mat = pat.matcher(s);
mat.find();
System.out.println(mat.group(1));

答案 1 :(得分:1)

Apache URLEncodedUtils可以为您完成此操作。

public static List<NameValuePair> parse(URI uri,
                        String encoding)

对于这种情况,我建议使用这样的库而不是正则表达式。 Apache库之前会遇到边缘情况等,并将进行编码。