2014-12-19 82 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]