2014-12-19 68 views
4

我有一個字符串,我想分裂;Java正則表達式來分割字符串與int,雙打

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

不知道如何在Java但在其他的語言你可以用括號你自己的團體,如'[A-Z,A-Z]'從匹配 – aarosil 2014-12-19 01:41:44

回答

5

你有沒有考慮字母字符,而不是使用\D令牌?

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 2014-12-19 13:16:12

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

輸出:

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