2010-02-19 5 views
3

나는 다음과 같은 문자열이 : 나는 oauth_token_secret에 대한 값을 구문 분석하려고자바 발견

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 

합니다. 등호 (=)에서 다음의 앰퍼샌드 기호 (&)까지 모든 것이 필요합니다. 나는 다음과 같은 코드를 가지고

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의 시작 부분에서 시작을하지만, 다음 앰퍼샌드에서 멈추지 않을 것입니다 그래서 구문 분석 할 필요가있다. 다음 앰퍼샌드의 끝에서 중지하도록 지정하는 방법을 잘 모르겠습니다. 누구든지 나를 도울 수 있습니까?

답변

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); 
} 
+0

그게 속임수 였어, 어떻게이 일을 할 수 있는지 보여줘서 고마워! – littleK

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! ;-)

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); 
+0

+1 형식이 잘못된 입력 문자열이 null 포인터 또는 배열 인덱스 예외를 제공 할 수 있지만 +1이 가장 강력합니다. –

0

더 나은 솔루션은 Pattern를 사용 Matcher 클래스에 대응한다.

캡처 그룹을 사용하면 한 단계에서 적절한 부분 문자열을 확인하고 "잘라낼"수 있습니다.