Java найти подстроку - PullRequest
       13

Java найти подстроку

3 голосов
/ 19 февраля 2010

У меня есть следующая строка:

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 ]

8 голосов
/ 19 февраля 2010

Методы 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);
}
2 голосов
/ 19 февраля 2010
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);
1 голос
/ 19 февраля 2010

Использование 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;
}

Нажмите здесь для тест-драйва!; -)

0 голосов
/ 19 февраля 2010

Гораздо лучшим решением является использование Pattern и соответствующего Matcher класса.

Используя группу захвата, вы можете проверить и «вырезать» соответствующую подстроку за один шаг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...