基于分隔符拆分Java中的字符串,除非使用string.Split转义分隔符

基于分隔符拆分Java中的字符串,除非使用string.Split转义分隔符,java,regex,Java,Regex,我在java中得到了一个字符串,我想根据以下条件将其拆分为几个部分: “#”字符是分隔符 如果通过反斜杠转义“#”,则不应将is视为分隔符 i、 e “abc#xyz#kml\#ijk” 应分为 “abc”、“xyz”、“kml\#ijk” 我可以使用StringTokenizer轻松地完成这项工作,并为转义字符添加一些逻辑,但我希望使用正确的正则表达式通过一个线性String.split调用获得它。到目前为止,我的“最佳”尝试如下: public static void main(Stri

我在java中得到了一个字符串,我想根据以下条件将其拆分为几个部分:

  • “#”字符是分隔符
  • 如果通过反斜杠转义“#”,则不应将is视为分隔符
i、 e

“abc#xyz#kml\#ijk”

应分为

“abc”、“xyz”、“kml\#ijk”

我可以使用StringTokenizer轻松地完成这项工作,并为转义字符添加一些逻辑,但我希望使用正确的正则表达式通过一个线性String.split调用获得它。到目前为止,我的“最佳”尝试如下:

public static void main(String[] args) {

  String toSplit = "abc#xyz#kml\\#ijk";

  String[] arr = toSplit.split("[^\\\\]#");

  System.out.println(Arrays.toString(arr));
}
结果是:

[ab,xy,kml#ijk]

前两部分的最后一个字母被剪掉了


你知道如何避免这种情况吗?

你有没有调查过落后的人

public static void main(String[] args) {

      String toSplit = "abc#xyz#kml\\#ijk";

      String[] arr = toSplit.split("(?<!\\\\)#");

      System.out.println(Arrays.toString(arr));
}
publicstaticvoidmain(字符串[]args){
字符串toSplit=“abc#xyz#kml\\#ijk”;

String[]arr=toSplit.split(“(?这只对一个转义有效,当一行中有多个转义字符时失败。