Java лучше всего избегать коллизий? - PullRequest
3 голосов
/ 25 января 2012

У меня есть несколько строк, которые я должен сохранить в БД, которые я хотел бы разделить с помощью метода String.split позже. Однако меня беспокоят конфликты разделителей, поскольку хотя бы одно поле может содержать любой символ, а количество полей может варьироваться. Я думал об использовании только разделителя с невероятным набором символов. Но я не уверен, что это уместно.

Есть ли еще какие-нибудь хитрости, о которых вы можете подумать?

заранее спасибо

Ответы [ 3 ]

4 голосов
/ 25 января 2012

Не храните строки в базе данных, которую вы собираетесь разделить. Если у вас есть отношение 1: N, смоделируйте его с таблицей базы данных, в которой столбец содержит уникальный ключ на стороне 1, а второй столбец произвольной формы - на стороне N.

Если ничто не убедит вас не пихать списки в столбцы БД, то, возможно, используйте ограничение целостности , чтобы убедиться, что значения в столбце имеют ожидаемый формат.

2 голосов
/ 25 января 2012

Вы можете использовать подход, который используется в CSV (но не только): строка заключена в двойные квоты. Запятая, очевидно, разделитель. Тогда (некоторые выдержки):

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

Подробнее см. http://en.wikipedia.org/wiki/Comma-separated_values.

CSV также поддерживает разрывы строк и все остальное, я думаю. Поэтому я бы использовал его (или упрощенную версию, если это возможно) в этом случае - сохраните весь массив строк в формате CSV. Затем проанализируйте его с помощью одного из существующих синтаксических анализаторов.

2 голосов
/ 25 января 2012

Такая же техника используется в XML с разделами CDATA.Если вы сами создаете свои строки, вы можете сделать несколько экранировок, прежде чем объединять их.Вы можете выбрать символы-разделители из какого-то давно мертвого (или еще не живого) языка в качестве разделителей - таких как клингон, клинопись или финикийец.

Выберите то, что вам нравится: http://en.wikipedia.org/wiki/Unicode

...