2016-07-14 2 views
-2
Map<String, String> fieldMap = new HashMap<String, String>(); 

String strTest1 = "Q1 = '1PAaEaO5Js+zUErWe1Ns8fR==' and q2 = 'v21PAaEaO5Js+zUErWe1Ns8fR='"; 
String strTest2 = "Q1='1PAaEaO5Js+zUErWe1Ns8fR==' and q2='v21PAaEaO5Js+zUErWe1Ns8fR='"; 

String[] output = input.split("\\s+and\\s+"); 
     for(String s:output){ 
      String [] params = s.split("="); 

      String key = params[0].trim(); 
      String value = params[1].trim(); 
      fieldMap.put(key, value.substring(1, value.length()-1));   

     } 
    System.out.println(fieldMap); 

위의 예제를 시도해 본 결과 strTest1에 대해 잘 작동합니다. 그러나 strTest2를 파싱하지 않습니다.문자열 분할에 대한 정규식

예상 출력 {Q1 = 1PAaEaO5Js + zUErWe1Ns8fR == Q2 = v21PAaEaO5Js + zUErWe1Ns8fR =}

우리 의한 분할은 같이 = 그러나이 값으로부터 제거되지 않아야

감사합니다

+0

그리고 무엇이 문제입니까? – f1sh

+0

문제는 String [] params = s.split ("\\ s + = \\ s"); 첫 번째 테스트 문자열은 통과하지만 두 번째 테스트 문자열은 통과하지 않습니다. – user2519513

+0

strTest1과 strTest2는 모두 – user2519513

답변

0

당신은 각각 '='로 그것을 나눕니다. 그리고 당신은 3 가지가 더 파싱을 망칠 것입니다.

Map<String, String> fieldMap = new HashMap<String, String>(); 

String strTest1 = "Q1 = '1PAaEaO5Js+zUErWe1Ns8fR==' and q2 = 'v21PAaEaO5Js+zUErWe1Ns8fR='"; 
String strTest2 = "Q2='1PAaEaO5Js+zUErWe1Ns8fR==' and q3='v21PAaEaO5Js+zUErWe1Ns8fR='"; 

String[] lines={strTest1,strTest2}; 
for (String input:lines){ 
    String[] output = input.split("\\s+and\\s+"); 
      for(String s:output){ 
       String [] params = s.split("=",2); 

       String key = params[0].trim(); 
       String value = params[1].trim(); 
       fieldMap.put(key, value.substring(1, value.length()-1));   

    } 
} 
System.out.println(fieldMap); 
+0

을 보면 토큰을 2 개로 제한해야합니다. – jessarah