2017-04-17 46 views
1

我有一個字符串文本。我想在Text中獲得「簽名」關鍵字的價值。
這是我的代碼示例:
如何在java中有效地從字符串中獲取所需的數據?

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=" 

請給我建議的有效途徑去做這個。

+2

使用'matcher.group(1)',而不是簡單的'組()',看到這裏的例子https://開頭regex101.com/r/p1H08d/1 – 11thdimension

回答

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= 
相關問題