java相当于perl URI :: QueryParam模块

时间:2014-05-08 07:05:48

标签: java perl url

在java中是否有用于解析url查询参数的等效库?

为了说明我想要的东西,我发送了一个代码示例:

use URI;
use URI::QueryParam;

$u = URI->new("http://www.google.com?a=b&c=d");
print $u->query,"\n";    # prints foo=1&foo=2&foo=3

for my $key ($u->query_param) {
    print "$key: ", join(", ", $u->query_param($key)), "\n";
}

输出结果为:

  

a = b& c = d

     

a:b

     

c:d

我不想编写自己的查询片段解析函数。

2 个答案:

答案 0 :(得分:1)

java.net.URLjava.net.URI出了什么问题?

答案 1 :(得分:1)

不完全是,但接近:

final URI uri = URI.create(inputString);
final String[] queryParams = uri.getQuery().split("&");

然后您再次在"=" queryParams的每个元素上拆分。


注意:请勿直接使用URLDecoder来解码查询片段的值;它会将+转换为空格,which is wrong according to the URI specpchar包含sub-delim包含+!)

一个接近的解决方案是:

URLDecoder.decode(param.replace("+", "%2b"), "UTF-8")

要进行编码,请使用Guava' UrlPathSegmentEscaper

演示:这个简单的主要内容:

public static void main(final String... args)
    throws UnsupportedEncodingException, URISyntaxException
{
    System.out.println(URLDecoder.decode("a+b", "UTF-8"));
    System.out.println(new URI("http", "foo.bar", "/baz", "op=a+b", null));
    System.out.println(new URI("http", "foo.bar", "/baz", "op=a b", null));
}

打印:

a b // WRONG!
http://foo.bar/baz?op=a+b
http://foo.bar/baz?op=a%20b