2014-06-05 2 views
3

문자열을 분할해야하는데, 분할이 패턴 변경 지점에 있어야한다는 것을 명심하십시오.자바 문자열을 패턴 현명한 부분으로 나눕니다.

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=??????? ); 

문자열에는 세 가지 유형의 단어가 있습니다. 1A, 2H 등 2 X로 시작 : XL, XGR, XON 등 3. Y 시작되는 숫자로 시작 1 얀, YN 들아 등

I는 그것을 분할해야 부품의 세 가지 유형 :

:

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

나는에 대한 도움이 필요합니다 : 즉 문자열 'NXY'에서

1. contains words starting with number 
2. contains words starting with x 
3. contains words starting with y 

는 다음과 같은 부분으로 나눌 수있다

+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); 

테스트하지는 않았지만 정상적으로 작동하는지 확인했습니다. 희망이 도움이됩니다!

관련 문제