0

我有以下代码可以拆分字符串并返回一个字符串数组。

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 初学者社区非常有帮助。非常感谢

4

2 回答 2

4

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

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

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

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

于 2013-06-26T17:53:50.833 回答
1

它将字符串拆分为子字符串并将其划分为正则表达式字符或字符串:但不会将正则表达式放入输出中,因此:

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

于 2013-06-26T17:54:23.317 回答