我正在实现一个聊天系统,我在解析消息时遇到了问题。 作为消息字符串的一部分,我发送了一堆像这样的关键参数
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;
}
}
答案 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