2011-09-13 94 views
1

我想通過單詞「data ::」而不是單個字符來分割這個字符串。怎麼樣?如何在Java中分割單詞而不是單個字符?

String bla = "data::01000100010001000100data::0101001010101010101data::11111111111111111"; 
String result[] = bla.split("\\data::"); 
/* 
* this outputs the whole string 
* instead of only: 01000100010001000100*/ 
System.out.println(result[0]); 

注:

package test;   
    public class NewClass 
    {  
     public static void main(String[] args) 
     {  
      String bla = "data::0000data::1111data::010101"; 

      // Try 1 - failed 
      String[] parta = bla.split("\\ddata::"); 
      System.out.println(parta[0]);   
      System.out.println(parta[1]);   
      System.out.println(parta[2]);   

      // Try 2 - failed -- works 
      String[] partb = bla.split("data::"); 
      System.out.println(partb[0]); // consider as empty 
      System.out.println(partb[1]); // starts from here 
      System.out.println(partb[2]); 

      // Try 3 - failed 
      String partc[] = bla.split("\\wdata::"); 
      System.out.println(partc[0]);   
      System.out.println(partc[1]);   
      System.out.println(partc[2]);        
     } 
    } 

失敗輸出:

run: 
data::000 
111 
010101 

0000 
1111 

data::000 
111 
010101 

BUILD SUCCESSFUL (total time: 0 seconds) 
+3

您是否嘗試用''data ::「'替換'」\\ data ::「'? – home

+2

bla.split(「data ::」); – confucius

+1

在你的例子的第2個例子中,你需要打印出'partb [3]'。因爲你的輸入以分隔符開始,所以你會得到一個空字符串作爲第一個結果。按照@John B的建議使用Guava'a'Splitter',可以使用'omitEmptyStrings()'自動忽略這個額外的結果。 – ColinD

回答

6

\\d字符串文字內表示正則表達式中的一個數字。你需要拆就簡單:

bla.split("data::") 

由於沒有一個統一的數字,然後按ata::(模式:"\\data::"),則整個字符串以String.split(...)返回。

3
String bla = "data::01000100010001000100data::0101001010101010101data::11111111111111111"; 
String result[] = bla.split("data::"); 

測試 -

System.out.println(result[0]) //empty 
System.out.println(result[1]) //01000100010001000100 
3

嘗試番石榴的利斧類Splitter

Iterable<String> result = Splitter.on("data::").split(bla); 

好了,看着對方的反應可能是矯枉過正,但值得一試。這是一個非常好的工具,因爲它允許諸如「omitEmptyStrings」和「trimResults」之類的東西。

+1

我很猶豫是否使用外部庫來實現在Java核心'String'類中完成的東西。 –

+2

@Bart:'Splitter'在這裏具有'omitEmptyStrings()'的優點,因爲看起來OP在開始時不需要多餘的空字符串。而且,像這樣的事情一樣,爲這一件事添加一個庫是不值得的......該庫提供了許多其他有用的功能,使其值得。 – ColinD

+1

@Colin,是的,關於'omitEmptyStrings()'的好處。 –

相關問題