Java查找子字符串

时间:2010-02-19 04:00:54

标签: java string substring

我有以下字符串:

oauth_token=safcanhpyuqu96vfhn4w6p9x&**oauth_token_secret=hVhzHVVMHySB**&application_name=Application_Name&login_url=https%3A%2F%2Fapi-user.netflix.com%2Foauth%2Flogin%3Foauth_token%3Dsafcanhpyuqu96vfhn4w6p9x

我正在尝试解析oauth_token_secret的值。我需要从等号(=)到下一个&符号(&)的所有内容。所以我需要解析:hVhzHVVMHySB

目前,我有以下代码:

Const.OAUTH_TOKEN_SECRET = "oauth_token_secret";

Const.tokenSecret = 
  content.substring(content.indexOf((Const.OAUTH_TOKEN_SECRET + "="))
    + (Const.OAUTH_TOKEN_SECRET + "=").length(), 
      content.length());

这将从oauth_token_string的开头开始,但不会在下一个&符号处停止。我不确定如何指定在以下&符号的末尾停止。任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:8)

indexOf()方法允许您指定可选的fromIndex。这允许您找到下一个&符号:

int oauth = content.indexOf(Const.OAUTH_TOKEN_SECRET);
if (oauth != -1) {
  int start = oath + Const.OATH_TOKEN_SECRET.length(); // or
  //int start = content.indexOf('=', oath) + 1;
  int end = content.indexOf('&', start);
  String tokenSecret = end == -1 ? content.substring(start) : content.substring(start, end);
}

答案 1 :(得分:2)

public static Map<String, String> buildQueryMap(String query)  
{  
  String[] params = query.split("&");  
  Map<String, String> map = new HashMap<String, String>();  
  for (String param : params)  
  {
    String[] pair = param.split("=");
    String name = pair[0];  
    String value = pair[1];  
    map.put(name, value);  
  }  
  return map;  
}

// in your code
Map<String, String> queryMap = buildQueryMap("a=1&b=2&c=3....");
String tokenSecret = queryMap.get(Const.OAUTH_TOKEN_SECRET);

答案 2 :(得分:1)

使用String.split可以提供更清晰的解决方案。

static String getValue(String key, String content) {
  String[] tokens = content.split("[=&]");
  for(int i = 0; i < tokens.length - 1; ++i) {
    if(tokens[i].equals(key)) {
      return tokens[i+1];
    }
  }
  return null;
}

点击here进行试驾! ; - )

答案 3 :(得分:0)

更好的解决方案是使用Pattern和相应的Matcher类。

通过使用捕获组,您可以一步检查并“剪切”相应的子字符串。