如何在java中有效地从String中获取所需的数据?

时间:2017-04-17 12:50:21

标签: java

我有一个String Text。我想在Text中获得“signature”关键字的值。
这是我的代码示例:

public void parseMethod(){
String Text = "hmac username=\"dhannan\", algorithm=\"hmac-sha1\", headers=\"content\", signature=\"VwjwFaNSw3cLQbuqtwl2XPOmcis=\"";
Pattern pattern = Pattern.compile("signature=\"(.+)\"");
Matcher matcher = pattern.matcher(authorization);
int s = Text.indexOf("signature=");
String data="";
int index=s+11;
while(Text.charAt(index)!='"'){
     data+=Text.charAt(index);
     index+=1;
   }
System.out.println(data);
}

所以这会给我我想要的输出:

VwjwFaNSw3cLQbuqtwl2XPOmcis=

我不喜欢这种方法。我想用简单的正则表达式或其他方式做。

使用正则表达式

Pattern pattern = Pattern.compile("signature=\"(.+)\"");
Matcher matcher = pattern.matcher(Text);
if(matcher.find()){
            System.out.println(matcher.group());
}

但它提供了这个输出,而我只想要我需要额外工作的值,如上所述:

signature="VwjwFaNSw3cLQbuqtwl2XPOmcis="

请建议我这样做的有效方法。

1 个答案:

答案 0 :(得分:1)

与11thdimension建议一样,您应该使用matcher.group(1)来找到值本身:

String Text = "hmac username=\"dhannan\", algorithm=\"hmac-sha1\", headers=\"content\", signature=\"VwjwFaNSw3cLQbuqtwl2XPOmcis=\"";

Pattern pattern = Pattern.compile("signature=\"(.+)\"");

Matcher matcher = pattern.matcher(Text);

if (matcher.find()) {
    System.out.println(matcher.group(1));
}

>> VwjwFaNSw3cLQbuqtwl2XPOmcis=