从数字字符中分割起始字母字符

时间:2014-05-08 07:45:17

标签: java regex string split

我想分割一个字符串,以便我开始按字母顺序排列字符串(直到出现第一个数字)。和另一个字母数字字符串。

E.g: 我有一个字符串例如:Nesc123abc456

我希望通过拆分上面的字符串来获得两个字符串:Nesc,123abc456

我尝试了什么:

    String s = "Abc1234avc";
    String[] ss = s.split("(\\D)", 2);

    System.out.println(Arrays.toString(ss));

但这只是删除字符串中的第一个字母。

6 个答案:

答案 0 :(得分:4)

您可以使用外观,以便不使用分隔部分:

String s = "Abc1234avc";
String[] ss = s.split("(?<=\\D)(?=\\d)", 2);

System.out.println(Arrays.toString(ss));

ideone demo

(?<=\\D)确保在要拆分的部分之前有一个非数字,

(?=\\d)确保在要拆分的部分之后有一个数字。

答案 1 :(得分:1)

你需要量词。

尝试

String[] ss = s.split("(\\D)*", 2);

此处提供更多信息:http://docs.oracle.com/javase/tutorial/essential/regex/quant.html

答案 2 :(得分:0)

你没试过replaceAll吗?

String s = ...;
String firstPart = s.replaceAll("[0-9].*", "");
String secondPart = s.substring(firstPart.length());

答案 3 :(得分:0)

您可以使用:

String[] arr = "Nesc123abc456".split("(?<=[a-zA-Z])(?![a-zA-Z])", 2);
//=> [Nesc, 123abc456]

答案 4 :(得分:0)

split是一个破坏性过程,因此您需要找到第一个数字的索引并使用子字符串来获得结果。这也可能比使用正则表达式更快,因为它们背后有更多的启发式

int split = string.length();
for(int i = 0; i < string.length(); i ++) {
    if (Character.isDigit(string.charAt(i)) {
        split = i;
        break;
    }
}
String[] parts = new String[2];
parts[0] = string.substring(0, split);
parts[1] = string.substring(split);

答案 5 :(得分:0)

我认为这就是你的要求:

String s = "Abc1234avc";
String numbers = "";
String chars = "";
for(int i = 0; i < s.length(); i++){
    char c = s.charAt(i);
    if(Character.isDigit(c)){
        numbers += c + "";
    }
    else {
        chars += c + "";
    }
}

System.out.println("Numbers: " + numbers + "; Chars: " + chars);