如何在java中使用split函数转义?

时间:2015-01-07 09:20:16

标签: java regex

我正在实现一个聊天系统,我在解析消息时遇到了问题。 作为消息字符串的一部分,我发送了一堆像这样的关键参数

  

key1:value1,key2:value2,key3:value3,message:“带字符的随机文本:/”等。

我稍后将使用split on命令和冒号解析此字符串。但是其中一个参数是可以包含命令和冒号的消息。因此,如果消息包含任何这些字符,它将破坏我的解析逻辑。那么有什么方法可以在消息字符串中转义这些字符?我尝试添加两个反斜杠来逃避它,但这不起作用。

解析代码

        String[] params = chat.split(",");

    for(String param:params){
        String[]pair = param.split(":");
        if(pair.length != 2){
            String key = pair[0];
            String value = pair[1];
        }else{
            return null;
        }
    }

1 个答案:

答案 0 :(得分:0)

你的问题不明确我需要更多的例子和接收JSON格式的消息的最佳方式,这使你的工作更加清晰,但我提供了两个答案。

仅将消息作为原始消息(如果您确定键值为“message”并捕获第二部分中的所有内容):

for(String param:params){
        if (param.contains("message")){
            String[] pairs=param.split("message:");
            String key = "message";
            String value = pairs[1];
        }
        String[]pair = param.split(":");
        if(pair.length != 2){
            String key = pair[0];
            String value = pair[1];

        }else{
            return null;
        }
    }

返回:

  

“带有字符的随机文字:/”等。

要转义字符串中的特殊字符,您必须使用以下方法:

 for(String param:params){
        if (param.contains("message")){
            String[] pairs=param.split("message:");
            String key = "message";
            String value = StringEscapeUtils.escapeJava(pairs[1]);
        }
        String[]pair = param.split(":");
        if(pair.length != 2){
            String key = pair[0];
            String value = pair[1];

        }else{
            return null;
        }

返回:

  

\“带字符的随机文字:/ \”等

你必须导入Apache Commons Lang»3.0这里是maven的链接: http://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.0