这个正则表达式如何在Java中工作?

时间:2013-06-26 17:39:11

标签: java regex string split

我有以下代码片段分割字符串并返回字符串数组。

public static void main(String[] args) {
      String name="what is going on";
      String[] ary = name.split("");
      System.out.println(Arrays.toString(ary));
       }
//output: [, w, h, a, t,  , i, s,  , g, o, i, n, g,  , o, n]  

为了防止尾随空格,在分割期间使用了以下正则表达式。 但我想知道它是如何工作的

public static void main(String[] args) {
          String name="what is going on";
          String[] ary = name.split("(?!^)");
          System.out.println(Arrays.toString(ary));
           } //[w, h, a, t,  , i, s,  , g, o, i, n, g,  , o, n]

如果有人能够解释正则表达式所代表的内容以及该正则表达式如何用于拆分,那么它对Java初学者社区非常有帮助。非常感谢

2 个答案:

答案 0 :(得分:4)

在第一个示例中,空模式在字符串中的每个字符之前匹配。所以它匹配在第一个字符之前,第二个字符之前,等等。String.split(String) Javadoc表示尾随空字符串被忽略,但返回的字符串包括第一个匹配之前的字符串。因此,数组为{"", "w", "h", ..., "n"}

第二个示例的正则表达式匹配除字符串开头之外的任何位置。 (?)限制前瞻。 !使其成为负向前瞻,^表示字符串的开头。而且,正则表达式实际上没有消耗任何字符。因此,它匹配在第一个字符之后,在第二个字符之后,依此类推。没有任何角色本身被消耗掉,所以你有:

 w h a t   i s   g o   i n g   o n
  ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^

这里的插入符号是上面有空格的断点。

答案 1 :(得分:1)

它将字符串拆分为子字符串并将其除以正则表达式字符串或字符串: 但不要将正则表达式放入输出中:

string s1 =“除以空格”; 和 s1.split(“\ s”)[0]将被划分 s1.split(“\ s”)[1]将是by而不是“”