【问题标题】:Java Regex to split a String with int, doublesJava正则表达式用int分割字符串,双打
【发布时间】:2014-12-19 01:40:16
【问题描述】:

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

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]

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

【问题讨论】:

  • 不确定在 java 中如何,但在其他语言中,您可以使用 [A-Z,a-z] 等括号创建自己的组,以从匹配中排除 .

标签: java regex split


【解决方案1】:

您是否考虑过使用字母字符而不是使用\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]

【讨论】:

  • 谢谢!也匹配大写 String[] parts = s.split("(?
【解决方案2】:

您可以进行匹配而不是拆分,然后将匹配项存储到数组列表中。

[^\\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]

【讨论】:

    【解决方案3】:
    (?<=[a-zA-Z])(?=[^a-zA-Z])|(?<=[^a-zA-Z])(?=[a-zA-Z])
    

    按此拆分。查看演示。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 2017-09-05
      • 2011-12-22
      • 1970-01-01
      相关资源
      最近更新 更多