解析Groovy中的字符串?

时间:2012-05-10 22:41:26

标签: parsing groovy

我是Groovy的新手,我正在尝试从REST服务响应中解析标头。 字符串如下:

  

[HTTP://本地主机:4545 /第三方网页代码= IVJZw1]

我正在尝试编码IVJZw1

这很容易,我希望我能快速得到帮助。

Azou

3 个答案:

答案 0 :(得分:6)

如果你想要快速和肮脏的东西,你可以使用正则表达式:

def str = '[http://localhost:4545/third-party-web?code=IVJZw1]'
def code = (str =~ /code=(\w*)/)[0][1]
assert code == 'IVJZw1'

我假设“code”参数由字母数字字符组成(\w)。

但是,如果您发现自己经常从URL中提取参数值,那么此解决方案很快就会变得非常脏。像ataylor suggested这样的东西可能更合适,特别是如果你可以提取在单独的函数上获取URL参数的逻辑。甚至可能是URL类本身的一种方法:D

import java.net.*

// Retrieves the query parameters of a URL a Map.
URL.metaClass.getQueryParams = { ->
    delegate.query.split('&').collectEntries { param -> 
        param.split('=').collect { URLDecoder.decode(it) }
    }.asImmutable()
}

// Then that method can be used directly on URLs :)
def str = '[http://localhost:4545/third-party-web?code=IVJZw1]'
def code = new URL(str[1..-2]).queryParams.code
assert code == 'IVJZw1'

答案 1 :(得分:4)

如果方括号被剥离,它只是一个URL。你可以尝试这样的事情:

import java.net.*
def str = '[http://localhost:4545/third-party-web?code=IVJZw1]'
def url = new URL(str.replaceFirst('^\\[', '').replaceFirst(']$', ''))
def paramMap = url.query.split('&').collectEntries { param -> 
    param.split('=').collect { URLDecoder.decode(it) }
}
assert paramMap['code'] == 'IVJZw1'

答案 2 :(得分:0)

Commons Http Client是java中的HTTP代理实现,支持客户端身份验证,HTTP状态管理和HTTP连接管理。这需要库httpclient-4.1.2.jar,httpcore-4.1.2.jar,httpmime-4.1.2.jar,httpclient-cache-4.1.2.jar,commons-codec.jar和commons-logging-1.1。 1.jar在课堂上。以下示例显示如何解析URI查询参数。

API

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/utils/URLEncodedUtils.html

是一个众所周知的图书馆,你可以使用

String url = "http://www.example.com/something.html?one=11111&two=22222&three=33333";
List<NameValuePair> params = URLEncodedUtils.parse(new URI(url), "UTF-8");

for (NameValuePair param : params) {
  System.out.println(param.getName() + " : " + param.getValue());
}

输出

  

一:11111

     

二:22222

     

三:33333