有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

正则表达式如何在java中使用带拆分函数的转义?

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

key1:value1,key2:value2,key3:value3,message:"random text with character : /" etc.

稍后我将使用spliton命令和冒号解析这个字符串。然而,其中一个参数是message,它可以同时包含命令和冒号。因此,如果消息包含这些字符中的任何一个,它将破坏我的解析逻辑。那么,有什么方法可以转义消息字符串中的这些字符吗?我试着加上两个反斜杠来逃避它,但没有成功

解析代码

        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) 个答案

  1. # 1 楼答案

    你的问题不清楚,我需要更多的例子和接收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;
            }
        }
    

    返回:

    "random text with character : /" etc.

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

     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;
            }
    

    返回:

    \"random text with character : /\" etc.

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