[英]how does this regex work in Java?
我有以下代碼用於拆分字符串並返回字符串數組。
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初學者社區非常有用。 非常感謝
在第一個示例中,空模式在字符串中的每個字符之前匹配。 因此,它在第一個字符之前,第二個字符之前等等進行匹配String.split(String)
Javadoc指示尾隨的空字符串將被忽略,但是返回的字符串包括第一個匹配項之前的內容。 因此,數組為{"", "w", "h", ..., "n"}
。
第二個示例有一個regexp,它匹配字符串開頭以外的任何位置。 (?
和)
限制了前瞻。 !
使其為負數,並且^
表示字符串的開頭。 而且,正則表達式實際上沒有消耗任何字符。 因此,它在第一個字符之后,第二個字符之后匹配,依此類推。 沒有一個字符本身被消耗掉,因此您具有:
w h a t i s g o i n g o n
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
此處的插入符號是帶有空格的斷點。
它將字符串拆分為子字符串,然后將其分割為正則表達式char或字符串:但是不會將正則表達式放入輸出中,因此:
字符串s1 =“除以空格”; 和s1.split(“ \\ s”)[0]將被除以s1.split(“ \\ s”)[1]將是by,而不是“”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.