2014-01-28 155 views
1

我有問題,拆分字符串'split_',它似乎是我的java netbean不能拆分'split_'被使用。如何拆分Java中的'*'字符串

任何想法我們如何克服這一點?

我指的是這個解決方案,但它只能在不使用'*'的情況下進行拆分。 How to split a string in Java

String echoPHP= "test*split_*test2"; 

    String[] strArray = echoPHP.split("*split_*"); 

    String part1 = strArray2[0]; // 004 
    String part2 = strArray2[1]; // 034556 



    System.out.println(strArray[0]); 
    System.out.println(strArray[1]); 

錯誤是:

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 
*split_* 

輸出應該是:

test 
test2 
+2

'split'接受正則表達式。所以一定要逃避特殊字符。閱讀javadoc。 –

+1

試試這個'.split(「\\ *」)' – Rugal

+0

請考慮參考String.split –

回答

3

使用Pattern.quote()周圍的分割字符串,以確保它作爲一個文字,而不是一個正則表達式:

String[] strArray = echoPHP.split(Pattern.quote("*split_*")); 

否則您將遇到困難,因爲*是正則表達式中的一個特殊字符,用於匹配進行處理的字符或組的任意數量的匹配項。

當然,您可以使用\手動轉義正則表達式中使用的所有特殊字符,但如果您不想使用任何正則表達式功能,則這兩個特徵都不太清晰且更容易出錯。

+2

的文檔感謝漿果,我喜歡你的代碼,所以我已經投了你的答案。 –

0

您可以使用拆分法這樣

String[] strArray = echoPHP.split("\\*split_\\*"); 
  • 字符是特殊的系統字符..所以你應該在*字符前使用「\」。
1

以下是在java中拆分字符串的不同情況。你可以使用一個適合你的應用程序。

情況1:這是用字符「」分割字符串的代碼。 :「」

String imageName = "picture1.jpg"; 
String [] imageNameArray = imageName.split("\\."); 
for(int i =0; i< imageNameArray.length ; i++) 
{ 
    system.out.println(imageNameArray[i]); 
} 

而如果錯誤地有前後左右空間在這種情況下?這也是考慮這些空間的最佳實踐。

String imageName = "picture1 . jpg"; 
    String [] imageNameArray = imageName.split("\\s*.\\s*"); 
     for(int i =0; i< imageNameArray.length ; i++) 
     { 
      system.out.println(imageNameArray[i]); 
     } 

這裏,\\ S *是有考慮的空間,讓你只需要分裂字符串。

現在,假設你已經像兩個特殊的字符之間放置參數:在像*放慢參數#時間#參數#或參數或者甚至是兩個不同的充跡象。我們可以通過這個代碼有那些症狀之間的所有這些參數的清單:

import java.util.ArrayList; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import org.apache.commons.lang.StringUtils; 

public class Splitter { 

    public static void main(String[] args) { 

     String pattern1 = "#"; 
     String pattern2 = "#"; 
     String text = "(#n1_1#/#n2_2#)*2/#n1_1#*34/#n4_4#"; 

     Pattern p = Pattern.compile(Pattern.quote(pattern1) + "(.*?)" + Pattern.quote(pattern2)); 
     Matcher m = p.matcher(text); 
     while (m.find()) { 
      ArrayList parameters = new ArrayList<>(); 
      parameters.add(m.group(1)); 
      System.out.println(parameters); 
      ArrayList result = new ArrayList<>(); 
      result.add(parameters); 
      // System.out.println(result.size()); 
     } 

    } 
} 

在這裏列出的結果將有參數N1_1,N2_2,n4_4。