나는 다음과 같은 문자열이 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) 도움이 필요하십니까?
[mcve]로 줄이십시오. 정규 표현식에 대한 * 정당한 것처럼 보입니다. 따라서 필요한 것은'Pattern'을 생성하고 하드 코딩 된 문자열과 대조하여 결과를보고하는'main' 메소드뿐입니다. 그것은 당신을 돕는 것이 훨씬 쉽고, 미래의 독자들에게 더 귀중한 것입니다. –
그리고 그게 문제를 보여주지 않는다면, 지나가는 문자열 값이 정말로 +가 있는지 확인하십시오. L.S의 대답은 매우 그럴듯하게 보입니다. 스택 오버플로에 게시하기 전에 진단 (로깅, 디버거) *으로 확인해야하는 일종의 것입니다. https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/ –
StackOverflow 커뮤니티가 처음입니다. Jon Skeet의 조언을 따를 것입니다. 감사합니다. –