2015-02-08 46 views
0

逃脱我在java中的字符串,我想在零件拆就以下标准:拆分Java中的字符串根据分隔,除非隔板与String.split

  • 以“#”字符是分隔
  • 如果 '#' 通过反斜线则不应被视为一个分隔符

“ABC#XYZ#公里升\ #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]

前两个的最后一个字母零件被切除。

任何想法如何避免这种情况?

回答

0

你看了看向后看吗?

public static void main(String[] args) { 

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

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

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

这只适用于一次转义,并且在一行中有多个转义字符时失败。 – nhahtdh 2015-02-09 04:53:09