【问题标题】:How can I parse a string that contains the same symbol I use as a delimiter?如何解析包含我用作分隔符的相同符号的字符串?
【发布时间】:2019-02-22 13:57:00
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 为什么不使用字段中禁止使用的字符?
  • $ 只是一个例子。我根本不想禁止任何角色
  • 您可以使用您将禁止的字符组合进行分组,例如“!@#”,因此您合并的字符串将是发件人!@#receiver!@#text
  • 如果你在发送端和接收端都处理字符串,那么你可以先在文本中转义分隔符,“I made $100” -> “I made \$100”
  • 你可以序列化它,然后在接收端反序列化它。您可以为此使用 JSON。

标签: java string parsing split delimiter


【解决方案1】:

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

您当前方法的问题是,使用特殊标记来分隔身体的不同部分,如果在这样的部分中使用相同的标记,可能会导致错误。永远无法确定分隔符是唯一的。

这就是人们发明序列化概念的原因。 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);

看到了吗?然后接收方可以使用这个 sn-p 反序列化它:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-31
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      相关资源
      最近更新 更多