使用URLEncoder.encode()发送String数组?

时间:2013-08-27 10:02:27

标签: java url-encoding

我有两个这样的字符串数组

String nearByColgs[]= {"461161","158179","218756","103456","184842","122560","118279"};
String interests[] ={"java","cricket"};

现在我想使用URL.encode()

发送它们

问题是URL.encode()仅支持字符串,例如

 URL.encode("http://www.google.com","UTF-8");

发送整个阵列的可能解决方法是什么?立刻说nearByColgs?

先谢谢!!

2 个答案:

答案 0 :(得分:1)

我假设您不仅希望使用url编码发送它,而且在另一端也解码它并且具有相同的2个字符串数组变量。

正如您已经发现的那样,您需要将您的Strings数组转换为单个String变量。

另一篇文章展示了如何轻松地将String数组转换为单个String。但它没有显示如何解析它。

你需要的是2个分隔符(例如逗号和分号),一个用于分隔数组中的值,另一个用于分隔数组。

StringBuilder b = new StringBuilder();
b.append(nearByColgs[0]);
for (int i=1; i<nearByColgs.length;i++) {
    b.append(',').append(nearByColgs[i]);
}
b.append(';')
b.append(interests[0]);
for (int i=1; i<interests.length;i++) {
    b.append(',').append(interests[i]);
}
String concatenated = b.toString();
String encoded = URLEncoder.encode(concatenated ,"UTF-8");

另一方面,您再次解码编码版本。

String decoded = URLDecoder.decode(encoded, "UTF-8");
String[] subArrays = decoded.split(";")

然后您可以再次恢复原始数据

String[] nearbyColgs = subArrays[0].split(",");
String interests = subArrays[1].split(",");

当然,这只适用于原始数据不包含使用的2个分隔符之一的情况。

如果是,请使用其他分隔符(如'a'和'b',或任何您需要的)或使用更复杂的算法来连接字符串并使用引用方案(如CSV标准那样)。

或者编码逻辑查找未使用的2个字符,并将这2个字符作为要编码的字符串中的第一个字符,解码端接收编码的字符串,对其进行解码并对2个第一个字符进行切割并将其用作分隔符。

请注意,使用的split函数接受正则表达式作为参数,因此请小心使用像*这样的典型正则表达式字符。

享受!

答案 1 :(得分:0)

尝试:

URL.encode(java.util.Arrays.toString( nearByColgs ) , "UTF-8");