1

我正在寻找一种在某个分隔符出现时将字符串分成两部分的方法。我知道当字符串看起来像这样时,这很容易做到:

String s = "prefix.key value";
String[] a = s.split("[ :=]",2);

但按照惯例,字符串可能包含转义的分隔符(在分隔符前面直接带有 '\')。所以我更新了正则表达式字符串:

String s = "prefix\ key value";
String[] a = s.split("[^\\\\][ :=]",2);

这会在几乎正确的位置拆分字符串,但会切断键的“y”。这是因为现在正则表达式匹配分隔符和它前面的字符。split() 方法会删除匹配的部分,只返回剩余的字符串。

我有一个使用 split() 并查看返回数组中字符串的结束字符的工作解决方案,但这似乎是一种过于复杂和缓慢的方法。

有没有人有更好的主意?

4

2 回答 2

1

使用否定的lookbehind断言

String[] a = s.split("(?<!\\\\)[ :=]",2);

所以你的字符类只有在它前面没有a时才会匹配\

于 2012-11-15T19:55:27.503 回答
0

我会在stema的回答下发表评论,但我还不能发表评论。我只是想建议对呈现的正则表达式进行小改动。

(?<!\\)[ :=]

否则转义码将需要两个反斜杠,而不仅仅是一个。

于 2012-11-15T20:19:27.907 回答