2013-03-19 2 views
0

아래는 예제 문자열입니다. 아래의 4 개 문자열 예제에서 userId은 항상 key으로 표시됩니다. 내 아래 방법 그래서 지금 ID를 다른 문자열과 구분하거나 정규 표현식을 사용하여 일치 시키십시오.

{siteRebateSenstvty=0;1,1;2, siteRedemptChg=16;30,77;40, userId=101} 
{sgmntId=1, userId=101} 
{predictedCatRev=0;101;1,1;201;2, predictedOvrallRev=77;2,0;1,16;3, sitePrftblty=77;2,0;1671679, topByrGms=12345.67, usrCurncy=1, vbsTopByrGmb=167167.67, userId=101} 
{zipCode=CA11 9QL, userId=101} 

, 나는 내가 isStringValid method에 문자열 ID를 전달하는 것, idstr 값을 확인하려합니다.

private boolean isStringValid(String str, String id) { 
    boolean valid = false; 

    System.out.println(str); 

    return valid; 
} 

문제 성명 : -

는 지금은 위의 JSON StringuserId valueid value 일치하는 것을 시도하고있다. 의미는 id value is 101 위의 경우 JSON StringuserId 값도 101이어야합니다. 일치하지 않거나 문자열에 userId 값이 없으면 vaild boolean to false을 설정합니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 이 101은 어떤 키의 일부 숫자로 존재 가능할 수 있기 때문에

나는 this-

if(str.contains(id))처럼 할 수 없습니다. (첫 번째 예 101) ID가 항상 ;, 또는 } 다음된다고 가정

답변

1

, 당신은 사용할 수 있습니다

String str = "{siteRebateSenstvty=0;1,1;2, siteRedemptChg=16;30,77;40, userId=101}"; 
String id = "101"; 
boolean valid = str.matches(".*userId=" + id + "[,;}]+.*"); 
System.out.println("valid = " + valid); 

[,;}]+ 부분은 다음 문자는 ID의 일부 (수 없도록 처리 예를 들어 101을 기대할 때 1015a는 유효한 사용자 ID로 간주되지 않습니다.

은 또한 아마도 더 강력한, 당신은 단어 경계 사용할 수 있습니다

boolean valid = str.matches(".*userId=" + id + "\\b+.*"); 
+0

아니가, 그것은 항상'다음 수없는 것,'','또는'}'. 내 네 번째 문자열 예제를 참조하십시오. 이전 키 값이 끝나자 마자 쉼표가 표시됩니다. 이렇게, -a, b, c와 같은 것 – AKIWEB

+0

@ Nevzz03 나는 모든 예제에서 101이'}'에 이어짐을 잘 모르겠다. 내가 제안하는 정규 표현식은'userId = 101 '또는'userId = 101,'또는'userId = 101;'와 같이 보이면 id를 찾을 것입니다. 적용 할 수없는 경우','또는'; '를 제거 할 수 있습니다. – assylias

+0

나는 항상 this = 'a = somevalue, b = somevalue, userId = 101'과 같은 String을 가질 것이다. – AKIWEB

관련 문제