我在网上搜索了我的查询,但没有得到完全符合我要求的答案。我的字符串如下所示:
A|B|C|The Steading\|Keir Allan\|Braco|E
我的输出应该如下所示:
A
B
C
The Steading|Keir Allan|Braco
E
我的要求是跳过分隔符(如果它前面有转义序列)。我在 String.split()
中使用负面回顾尝试了以下操作:
(?<!\\)\|
但是,我的问题是定界符将由最终用户动态定义,它不必总是 |
.它可以是键盘上的任何字符(无限制)。因此,我怀疑上面的正则表达式对于正则表达式中不允许的某些特殊字符可能会失败。
我只是想知道这是否是完美的方式。
最佳答案
您可以使用 Pattern.quote()
:
String regex = "(?<!\\\\)" + Pattern.quote(delim);
使用你的例子:
String delim = "|";
String regex = "(?<!\\\\)" + Pattern.quote(delim);
for (String s : "A|B|C|The Steading\\|Keir Allan\\|Braco|E".split(regex))
System.out.println(s);
A B C The Steading\|Keir Allan\|Braco E
You can extend this to use a custom escape sequence as well:
String delim = "|";
String esc = "+";
String regex = "(?<!" + Pattern.quote(esc) + ")" + Pattern.quote(delim);
for (String s : "A|B|C|The Steading+|Keir Allan+|Braco|E".split(regex))
System.out.println(s);
A B C The Steading+|Keir Allan+|Braco E
关于java - 在 Java String.split() 方法中使用转义字符处理定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18677762/