0

您如何将 URL 的粗体部分解析为字符串?唯一出现在我脑海中的方法是疯狂的子字符串和 indexOfs,在我看来这不是正确的方法......而且我在正则表达式方面并不是特别强所以任何帮助表示赞赏。

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=资源&portal%3AportletMode=view"

PS 这是一个门户 URL,但这并不重要,因为我只有 JDK 没有 portlet 工具可供我使用:)

4

2 回答 2

2

如果您接受 hack,则无需精通正则表达式。

substrings 和indexOfs:

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));
于 2013-07-02T09:40:59.413 回答
1

Apache URLEncodedUtils可以为您做到这一点。

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

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

于 2013-07-02T09:31:25.927 回答