2011-09-13 11 views
1

私はこの文字列を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

あなたの例のtry 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); 

[OK]をグァバのスプリッタクラスを試してみてください、他の回答を見ると行き過ぎが、チェックアウトする価値があるかもしれません。それは "omitEmptyStrings"や "trimResults"のようなものを許可するので、本当に素晴らしいツールです。

+1

私は、Javaのコア 'String'クラスで非常に日常的に行われる何かのために外部ライブラリを使用することを躊躇しています。 –

+2

@Bart: 'Splitter'はここで' omitEmptyStrings() 'の利点を持っています。なぜなら、OPは最初に余分な空文字列を必要としないように思われるからです。そして、いつものように、この1つの目的のためだけにライブラリを追加する価値はありません。ライブラリには、価値がある他の多くの便利な機能があります。 – ColinD

+1

@Colin、ええ、omitEmptyStrings()についての良い点です。 –

関連する問題