2017-12-12 3 views
0

나는 다음과 같은 문자열이 attribute.For 예를 들어 값 얻기 위해 문자열을 구문 분석 할 : calling_number = + 385317KFWVM을 call_direction = I, conversation_duration = 29구문 분석 자바 문자열 특수 문자 오류

각 속성과 그 값은 쉼표로 구분됩니다. MessageBean이라는 클래스에있는 각 속성의 이름과 유형을 선언했습니다.

public static void main(String[] args){ 

try { 
     MessageBean attributes_bean = MessageBean.parse("calling_number=+385317KFWVM, call_direction=I, conversation_duration=29,"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 


public class MessageBean { 

    private String calling_number; 
    private String call_direction; 
    private int conversation_duration; 

    public static MessageBean parse(String line) throws UnsupportedEncodingException { 
     MessageBean bean = new MessageBean(); 
     line = URLDecoder.decode(line, "utf-8"); 
     bean.setCalling_number(MessageBean.getParameter(line, "calling_number")); 
     bean.setCall_direction(MessageBean.getParameter(line, "call_direction")); 
     bean.setConversation_duration(Integer.parseInt(MessageBean.getParameter(line, "conversation_duration"))); 

    return bean; 
    } 

    private static String getParameter(String line, String name) { 
     String value = ""; 

     Pattern p = Pattern.compile(name + "=([^,]*),"); 
     Matcher m = p.matcher(line); 
     if (m.find()) { 
      value = m.group(1); 
     } 

     return value; 
    } 

} 

나는 나의 결과가 + 385317KFWVM, 내가 29이 될 것으로 기대합니다.

대신 내가 얻을 385317KFWVM, I, 내 일반 그 표정에 문제가 \ +하지만 난 아직도하지 않는 것처럼 모든 시도가 있다는 것을 이해 내가 + sign.I를 그리워한다는 것을 의미 (29) 도움이 필요하십니까?

+1

[mcve]로 줄이십시오. 정규 표현식에 대한 * 정당한 것처럼 보입니다. 따라서 필요한 것은'Pattern'을 생성하고 하드 코딩 된 문자열과 대조하여 결과를보고하는'main' 메소드뿐입니다. 그것은 당신을 돕는 것이 훨씬 쉽고, 미래의 독자들에게 더 귀중한 것입니다. –

+0

그리고 그게 문제를 보여주지 않는다면, 지나가는 문자열 값이 정말로 +가 있는지 확인하십시오. L.S의 대답은 매우 그럴듯하게 보입니다. 스택 오버플로에 게시하기 전에 진단 (로깅, 디버거) *으로 확인해야하는 일종의 것입니다. https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/ –

+0

StackOverflow 커뮤니티가 처음입니다. Jon Skeet의 조언을 따를 것입니다. 감사합니다. –

답변

3

URLDecoder.decode (줄, "utf-8")를 실행하면 +가 문자열에서 제거됩니다.

+0

당신이 맞아요! 라인 디코더를 제거하고 잘 작동합니다. 많이 감사합니다! –

관련 문제