需要在java中将字符串拆分为两部分

时间:2010-06-08 07:59:02

标签: java regex string regex-lookarounds lookaround

我有一个字符串,其中包含一个连续的数字块,然后是一个连续的字符块。我需要将它们分成两部分(一个整数部分和一个字符串)。

我尝试使用String.split("\\D", 1),但它正在吞噬第一个角色。 我检查了所有的String API,但没找到合适的方法。

有没有办法做这件事?

2 个答案:

答案 0 :(得分:13)

使用外观:str.split("(?<=\\d)(?=\\D)")

String[] parts = "123XYZ".split("(?<=\\d)(?=\\D)");
System.out.println(parts[0] + "-" + parts[1]);
// prints "123-XYZ"

\d是数字的字符类; \D是否定的。因此,此零匹配断言与前一个字符为数字(?<=\d)的位置匹配,后续字符为非数字(?=\D)

参考

相关问题


使用有限拆分的替代解决方案

以下也有效:

    String[] parts = "123XYZ".split("(?=\\D)", 2);
    System.out.println(parts[0] + "-" + parts[1]);

这在我们看到非数字之前就分裂了。这更接近你的原始解决方案,除了因为它实际上不匹配非数字字符,它不会“吃掉它”。此外,它使用limit 2,这正是你想要的。

API链接

  • String.split(String regex, int limit)
    • 如果限制n大于零,那么模式将最多应用n - 1次,数组的长度不会超过n,并且数组的最后一个条目将包含超出最后匹配分隔符的所有输入。

答案 1 :(得分:3)

总有一种老式的方式:

private String[] split(String in) {    
  int indexOfFirstChar = 0;
  for (char c : in.toCharArray()) {
    if (Character.isDigit(c)) {
      indexOfFirstChar++;
    } else {
      break;
    } 
  }    
  return new String[]{in.substring(0,indexOfFirstChar), in.substring(indexOfFirstChar)};
}

(希望它适用于仅限数字或仅限字符串的字符串 - 无法在此处测试 - 如果没有,请将其视为一般概念)