解析Java字符串特殊字符错误

时间:2017-12-12 11:09:05

标签: java regex string

我想解析一个字符串,以获取属性的值。例如,我有以下字符串:       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,I,29

相反,我得到 385317KFWVM,I,29 ,这意味着我错过了+符号。我明白我的正则表达式有问题。我已经尝试了所有类似\ +但我仍然不喜欢#39;得到正确的结果。任何帮助?

1 个答案:

答案 0 :(得分:3)

当你运行URLDecoder.decode(line," utf-8")时,+会从你的字符串中删除。