2014-06-05 155 views
3

我必須拆分一個字符串,請記住拆分應該在模式更改點。將java字符串分解爲模式明智的部分。

String nxy= "xI yam yw 1a 2pro xgr xon xsig yk yn ya 2h 3h xpr xoc yes ysin yn" 
String[] patterns=nxy.split( regex=??????? ); 

字符串有三種類型的單詞。 1.開始編號:1A,2H等等 2.開始具有x:XL,XGR,XON等 3.開始與Y:山藥,YN,咋等

我需要它在分割三種類型的部分組成:

1. contains words starting with number 
2. contains words starting with x 
3. contains words starting with y 
換句話說字符串 'NXY'

被分爲以下幾個部分:

xI 
yam yw 
1a 2pro 
xgr xon xsig 
yk yn ya 
2h 3h 
xpr xoc 
yes ysin yn 

我需要的幫助:

String[] patterns=nxy.split( ????????????????  ); 
+0

它是否必須是正則表達式? –

+0

所以'yam yw'是分裂後的一組,還是會是'yam,yw'? – hwnd

回答

1
String temp = nxy.replaceAll("(?:\\b(x|y)[^\\s]*(?:(?:\\s+\\1[^\\s]*)*))|(?:(?:\\s+\\d[^\\s]*)+)","$0\n"); 
    for (String o : temp.split("\\n")) { 
     System.out.println(o); 
    } 
0

我不知道從哪裏開始做,與正則表達式,但我寫了一些方法,應該處理您的案件。

public List<String> splitByCrazyPattern(String nxy) { 
    String[] split = nxy.split(" "); 
    List<String> patterns = new ArrayList(); 
    for(int i = 0; i < split.length(); i++) { 
     String string = split[i]; 
     while(checkNext(string.substring(0, 1)), string[i+1]) { 
      i++; 
      string += " " + split[i]; 
     } 
     patterns.add(string); 
    } 
    return patterns; 
} 

public boolean checkFirst(String first, String string) { 
    if (first.equals(string.substring(0,1))) { 
     return true; 
    } 
    if (first.matches("[0-9]") && string.substring(0, 1).matches("[0-9") { 
     return true; 
    } 
    return false; 
} 

String nxy= "xI yam yw 1a 2pro xgr xon xsig yk yn ya 2h 3h xpr xoc yes ysin yn"; 
String[] patterns= splitByCrazyPattern(nxy); 

沒有測試過,但我很確定它應該工作。希望能幫助到你!