2015-08-20 79 views
8

如何在Java中使用分割函數調用時轉義+字符?如何在java中逃避+字符?

分裂聲明

String[] split(String regularExpression) 

這就是我所做的

services.split("+"); //says dongling metacharacter 

services.split("\+"); //illegal escape character in string literal 

但它允許做這樣的事情

String regExpr="+"; 
+1

@kocko非常感謝.... **但爲什麼我必須\\ +字符**爲什麼不\? –

+1

因爲'+'是一個正則表達式的特殊字符,'split'接受正則表達式 –

+0

@JordiCastilla,但正如我所知的split接受String。有沒有特殊類型的分割字符串? IDE通知我這些錯誤。我沒有編譯這個。 –

回答

5

由於+是一個正則表達式元字符(表示發生1次或更多次),您必須使用來避免它(其中也有轉義,因爲它描述的製表符當這樣被使用的元字符,換行字符(S)\r\n等),所以你要做的:

services.split("\\+"); 
1

應像這樣:

services.split("\\+"); 
1

Java和正則表達式都具有特殊的轉義序列,二者均與\開始。

你的問題在於在Java中編寫字符串文字。 Java的轉義序列在編譯時就已經解決了,就在字符串被傳遞到Regex引擎進行解析之前。

序列"\+"會引發錯誤,因爲這不是有效的Java字符串。

如果您想將\+傳遞到您的Regex引擎中,您必須明確讓Java知道您想使用"\\+"傳遞反斜槓字符。

所有有效的Java轉義序列如下:

\t Insert a tab in the text at this point. 
\b Insert a backspace in the text at this point. 
\n Insert a newline in the text at this point. 
\r Insert a carriage return in the text at this point. 
\f Insert a formfeed in the text at this point. 
\' Insert a single quote character in the text at this point. 
\" Insert a double quote character in the text at this point. 
\\ Insert a backslash character in the text at this point.