2014-12-19 2 views
4

분리하려는 문자열이 있습니다.자바 정규식을 사용하여 문자열을 정수로 나눕니다.

String x = "abc4.5efg2hij89k.9"; 

나는

abc, 4.5, efg, 2, hij, 89, k, .9 

로 출력 내가 쉽게 자리하고 그러나 비 숫자에 걸쳐 분할 할 수 있습니다 원하는 '.' 문자로 간주됩니다.

x.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)") 
[abc, 4, ., 5, efg, 2, hij, 89, k., 9] 

복식을 지원하는 가장 좋은 방법은 무엇입니까?

+0

자바하지만 다른 LANG 당신이'[A-Z, A-Z]' – aarosil

답변

5

은 당신이 생각 해 봤나 편지 문자?

String s = "abc4.5efg2hij89k.9"; 
String[] parts = s.split("(?<=[a-z])(?=[\\d.])|(?<=\\d)(?=[a-z])"); 
System.out.println(Arrays.toString(parts)); 

출력

[abc, 4.5, efg, 2, hij, 89, k, .9] 
+1

감사 일치에서 .''제외처럼 브래킷 자신의 그룹을 만들 수있는 방법 확실하지! 대문자와도 일치해야합니다. String [] parts = s.split ("(? <= [A-Za-z]) (? = [\\ d.]) | (? <= \\ d) (? = [ A-Za-z]) "); – chifer

1

분할 대신 일치 검색을 수행 한 다음 해당 일치 항목을 배열 목록에 저장할 수 있습니다.

[^\\d.]+|\\d*(?:\\.\\d+)? 

DEMO

String x = "abc4.5efg2hij89k.9"; 
Pattern regex = Pattern.compile("[^\\d.]+|\\d*(?:\\.\\d+)?"); 
Matcher matcher = regex.matcher(x); 
ArrayList<String> returnValue= new ArrayList<String>(); 
while(matcher.find()) 
    { 
     if(matcher.group().length() != 0) 
     { 
      returnValue.add(matcher.group()); 
     } 
    } 
System.out.println(returnValue); 

출력 : 대신 \D 토큰을 사용

[abc, 4.5, efg, 2, hij, 89, k, .9] 
관련 문제