除非使用String.split转义分隔符,否则基于分隔符在Java中拆分字符串

时间:2015-02-08 18:53:13

标签: java regex

我在java中有一个字符串,我想按照以下标准分成几部分:

  • '#'char是分隔符
  • 如果'#'通过反斜杠转义,则不应将其视为分隔符

  

“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]

前两部分的最后一个字母被删除了。

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

1 个答案:

答案 0 :(得分:0)

你有没看过外观?

public static void main(String[] args) {

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

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

      System.out.println(Arrays.toString(arr));
}