2012-11-27 83 views
0

我需要爲我正在製作的算法剪切某些字符串。我正在使用substring(),但它太複雜,實際上無法正常工作。我發現這個話題how to cut string with two regular expression "_" and "."切割字符串java

,並決定嘗試用split()但它總是給我

java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0 
+ 
^ 

所以這是我的代碼有:

 String[] result = "234*(4-5)+56".split("+"); 
     /*for(int i=0; i<result.length; i++) 
     { 
     System.out.println(result[i]); 
     }*/ 
     Arrays.toString(result); 

任何想法,爲什麼我得到這個刺激性的例外?

P.S.如果我解決這個問題,我會發布切割算法,然後是整個計算器的算法(因爲我正在構建一個計算器)。它會是一個真正的壞蛋計算器,我承諾:P

回答

3

+在正則表達式中有特殊的含義。被視爲一個正常的字符,你應該用反斜槓來轉義它。

String[] result = "234*(4-5)+56".split("\\+"); 

以下是正則表達式中的metacharaters。對待任何一個正常的字符,你應該用反斜槓

<([{\^-=$!|]})?*+.> 

refer here about how characters work in regex逃避它們。

2

+是一個正則表達式量詞(意爲一個或多個),所以需要在split方法進行轉義:

String[] result = "234*(4-5)+56".split("\\+"); 
2

你應該分裂您的字符串是這樣的: -

String[] result = "234*(4-5)+56".split("[+]"); 

因爲,String.split需要regex作爲分隔符,和+是正則表達式中的元字符,意思是匹配1 or more重複,所以在正則表達式中使用bare是錯誤的。

您可以在字符類中使用它來匹配+文字。因爲在character class中,元字符和所有其他字符都有其特殊含義。只有hiephen(-)具有特殊含義,意思是range

2

+符號在正則表達式中有意義,split是如何解析它的參數的。你需要正則表達式 - 逃避加號角色。

.split("\\+");