Как я могу разобрать строку, содержащую тот же символ, который я использую в качестве разделителя? - PullRequest
0 голосов
/ 22 февраля 2019

Я бы хотел собрать несколько строк и потом снова разделить их.Символ, который я хотел бы использовать в качестве маркера для точки, в которой соединена строка, также должен иметь место в строках.

Пример:
Мы хотим отправить сообщение кому-то еще.Должно быть не только само сообщение, но и некоторая информация об отправителе и получателе.

Итак, у нас есть три строки: отправитель, получатель и текст.В качестве разделителя я использую $.Это означает, что объединенная строка будет иметь следующий синтаксис: sender $ receive $ text

Пока в отправителе, получателе или тексте нет $, все в порядке и не будетпроблема при разделении строки снова.Но когда в одной из строк есть $, будет выдан неожиданный вывод.

Как можно избежать этой проблемы, не создавая правило, запрещающее использование $?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Когда вы соединяете строки, вы можете покинуть поля и заменить доллары какой-либо escape-последовательностью (например, \d), и убрать их при чтении.

0 голосов
/ 22 февраля 2019

Вы по существу сериализуетесь и десериализуетесь.

Проблема с вашим текущим подходом, то есть с использованием специального токена для разделения различных частей тела, заключается в том, что это может привести к ошибкам, если этот самый токениспользуется в такой части.Никогда нельзя быть уверенным, что разделитель будет уникальным.

Вот почему люди изобрели концепцию сериализации. 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);
...