如何在Java中拆分单词而不是单个字符?

时间:2011-09-13 17:58:52

标签: java parsing

我想用单词“data ::”分割这个字符串而不是单个字符。怎么样?

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 个答案:

答案 0 :(得分:6)

字符串文字中的

\\d表示正则表达式中的数字。你需要简单地分开:

bla.split("data::")

由于没有单个数字后跟ata::(模式:"\\data::"),整个字符串由String.split(...)返回。

答案 1 :(得分:3)

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

测试 -

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

答案 2 :(得分:3)

尝试Guava的Splitter课程Splitter

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

好的,看看其他回复可能有些过分但值得一试。这是一个非常好的工具,因为它允许诸如“omitEmptyStrings”和“trimResults”之类的东西。