如何解析包含我用作定界符的相同符号的字符串?

How can I parse a string that contains the same symbol I use as a delimiter?

我想把一些字符串放在一起,然后再拆分。我想用作字符串放在一起的点的标记的字符也应该允许出现在字符串中。

示例:
我们想向其他人发送消息。不仅应该有消息本身,还应该有一些关于发送者和接收者的信息。

所以我们有三个字符串:发送者、接收者和文本。作为分隔符,我使用 $。这意味着合并后的字符串将具有以下语法:sender$receiver$text

只要sender, receiver, text中没有$就没有问题,再次拆分String也不会有问题。但是当其中一个String中有$时,会给出意想不到的输出

如何在不创建不允许使用 $ 的规则的情况下避免此问题?

你实际上是在序列化和反序列化。

您当前的方法(即使用特殊标记来分隔 body 的不同部分)的问题在于,如果在此类部分中使用完全相同的标记,则可能会导致错误。永远无法确定分隔符是否是唯一的。

这就是人们发明序列化概念的原因。 JSON 是一种广泛使用的格式,参见 json.org. There are also plenty of parsers for that, for example Gson

假设您有以下 class:

class Message {

    private String sender;
    private String receiver;
    private String text;

}

那么可以序列化成这样:

{
    "sender": "me",
    "receiver": "you",
    "text": "Almost any char can occur inside this, even \" or \. They are simply escaped"
}

使用如下代码片段:

Message message = new Message("me", "you",
    "Almost any char can occur inside this, even \" or \. They are simply escaped");
    // The Java language itself uses the same escape sequences as JSON.
    // It actually works the same way

// Surprisingly easy to convert Java object to JSON
new Gson().toJson(message);

看到了吗?然后接收方可以使用此代码段对其进行反序列化:

new Gson().fromJson(receivedString, Message.class);

当您将字符串放在一起时,您可以转义字段并用一些转义序列替换美元(例如\d),并在读取时取消转义。