Java Regex用int分割String,双精度

时间:2014-12-19 01:40:16

标签: java regex split

我有一个我要拆分的字符串;

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]

支持双打的最佳方式是什么?

3 个答案:

答案 0 :(得分: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 :(得分: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]

答案 2 :(得分:0)

(?<=[a-zA-Z])(?=[^a-zA-Z])|(?<=[^a-zA-Z])(?=[a-zA-Z])

由此分开。参见演示。

https://regex101.com/r/vN3sH3/19