2012-01-25 36 views
3

我有一些字符串,我必须存储在一个数据库中,我想稍后使用String.split方法进行拆分。但是,由于至少有一个字段可能包含任何字符,并且字段数可能会有所不同,所以我担心分隔符冲突。 我正在考虑只用一个不太可能的字符组的分隔符。但我不确定它是否合适。避免定界符冲突的Java最佳实践?

有没有其他的技巧可以想到?

由于事先

回答

2

同样的技术在XML与CDATA段被使用。如果你自己创建你的字符串,你可以在连接它们之前进行一些转义。你可以从一些长期死亡(或还没有活着)的语言中选择分隔符作为分隔符 - 例如克林贡语,楔形文字或腓尼基语。

选择你喜欢的东西:http://en.wikipedia.org/wiki/Unicode

+2

所以你说克林贡是......不是还活着?对不起,无法抗拒那一个;-) –

+0

......该死的,现在我必须看着我的背部为铆接皮革衣服挥舞奇怪的刀片的大个子;) –

+1

我喜欢暗淡的分隔符的想法,但我确实感受到需要提到的是,将预先转义的值存储在数据库中通常是不好的做法。您可能是数据的唯一发布者和使用者,但是谁知道未来会发生什么变化 - 然后他们将不得不解决当前逃脱的模型。存储原始数据和处理一次是最佳实践。 –

2

可以使用的办法,在CSV使用(但不是唯一的):字符串被包裹成的双配额。逗号显然是一个分隔符。然后(一些摘录):

  • 带有嵌入逗号的字段必须包含在双引号 字符中。
  • 带嵌入式双引号字符的字段必须包含在 双引号字符内,并且每个嵌入式双引号字符 必须用一对双引号字符表示。
  • 等...

详情请参阅http://en.wikipedia.org/wiki/Comma-separated_values

CSV也支持换行和其他一切,我猜。所以我会在这种情况下使用它(或简化版本) - 以CSV格式存储整个字符串数组。然后使用现有解析器之一解析它。

4

不要在要分割的数据库中存储字符串。如果您有1:N关系,请使用一个数据库表进行建模,该数据库表的一侧具有一个唯一键,另一个是N侧的自由格式列。

如果没有什么会说服您不将列表推入到DB列中,那么可以使用integrity constraint来确保列中的值具有预期的格式。

+0

这取决于任务,但通常情况下,任何应用于数据库的非DB风格决策都可能在未来造成问题:例如,升级架构可能变得不够简单。 – Wizart