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

问题描述 投票:0回答:2

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

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

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

只要发送者,接收者或文本中没有$,一切都很好,再次分割字符串时不会有问题。但是当其中一个字符串中有一个$时,会给出意想不到的输出。

如果不创建不允许使用$的规则,我该如何避免这个问题?

java string parsing split delimiter
2个回答
3
投票

您基本上是序列化和反序列化。

当前方法的问题,即使用特殊标记来分离正文的不同部分,如果在这样的部分中使用了相同的标记,则可能导致错误。人们永远无法确定分隔符是否是唯一的。

这就是人们发明序列化概念的原因。 JSON是一种广泛使用的格式,请参阅json.org。还有很多解析器,例如Gson

假设您有以下课程:

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

0
投票

当你把字符串放在一起时,你可以逃避字段并用一些转义序列(例如\d)替换美元,并在阅读时取消它们。

© www.soinside.com 2019 - 2024. All rights reserved.