在Java String.split()方法中使用转义字符处理分隔符

我在网上搜索了我的查询,但没有得到完全符合我要求的答案。 我有我的字符串如下:

A|B|C|The Steading\|Keir Allan\|Braco|E 

我的输出应如下所示:

 A B C The Steading|Keir Allan|Braco E 

我的要求是跳过分隔符,如果前面有转义序列。 我在String.split()使用负面lookbehinds尝试了以下方法:

 (?<!\\)\| 

但是,我的问题是分隔符将由最终用户动态定义,并且不必总是| 。 它可以是键盘上的任何字符(没有限制)。 因此,我怀疑上述正则表达式可能会因正则表达式中不允许的某些特殊字符而失败。

我只是想知道这是否是完美的方式。

你可以使用Pattern.quote()

 String regex = "(? 

使用你的例子:

 String delim = "|"; String regex = "(? 
一个
乙
 C
 Steading \ | Keir Allan \ | Braco
 Ë

您可以扩展它以使用自定义转义序列:

 String delim = "|"; String esc = "+"; String regex = "(? 
一个
乙
 C
 Steading + | Keir Allan + | Braco
 Ë

我知道这是一个旧线程,但是后视解决方案有一个问题,它不允许转义转义字符(分裂不会发生在A|B|C|The Steading\\|Keir Allan\|Braco|E) )。

线程Regex和转义和非转义分隔符中的正匹配解决方案效果更好(如果分隔符是动态的,则使用Pattern.quote()进行修改)。