java 相当于 perl URI::QueryParam 模块

标签 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

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

最佳答案

不完全是这样,但接近:

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

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

<小时/>

注意:不要直接使用 URLDecoder 来解码查询片段的值;它将把 + 变成空格,which is wrong according to the URI spec (pchar 包含 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

关于java 相当于 perl URI::QueryParam 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23535012/

相关文章:

perl - 写 "@ARGV ||= ' .';"有什么问题?

perl - 如何使用 Perl 的 DateTime 获取该月的第一天和最后一天?

url - 在Firefox中加载页面之前修改URL

php - 使用 PHP 从(搜索引擎)引用网址获取关键字

java - 为 ContextMenu 应用自定义 header

java - 如何在不复制对象的情况下将字符串转换为 char[]?

perl - 是否有一种标准方法可以选择性地从 Perl 父类(super class)继承方法?

javascript - 相同的 URL 提供不同的内容 - 为什么?

java - Android 上的 ParseImageView 不显示图像

Java软件工程: Composition vs Aggregation