Java 从数字字符中拆分起始字母字符

Java 从数字字符中拆分起始字母字符,java,regex,string,split,Java,Regex,String,Split,我想拆分一个字符串,这样我就可以开始按字母顺序排列的字符串(直到出现第一个数字)。和另一个字母数字字符串 例如: 我有一个字符串示例:Nesc123abc456 我想通过拆分上面的字符串得到以下两个字符串:Nesc,123abc456 我尝试过的: String s = "Abc1234avc"; String[] ss = s.split("(\\D)", 2); System.out.println(Arrays.toString(ss)); 但这只是从字符串中删

我想拆分一个字符串,这样我就可以开始按字母顺序排列的字符串(直到出现第一个数字)。和另一个字母数字字符串

例如: 我有一个字符串示例:Nesc123abc456

我想通过拆分上面的字符串得到以下两个字符串:Nesc,123abc456

我尝试过的:

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

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

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

您没有尝试
replaceAll

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

您没有尝试过
replaceAll

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

你需要量词

试一试


此处的更多信息:

您需要量词

试一试


此处的更多信息:

您可以使用lookarounds,这样您就不会使用定界部分:

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

System.out.println(Arrays.toString(ss));
String s=“Abc1234avc”;

String[]ss=s.split((?您可以使用lookarounds,这样您就不会使用定界部分:

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

System.out.println(Arrays.toString(ss));
String s=“Abc1234avc”;
String[]ss=s.split((?您可以使用:

String[] arr = "Nesc123abc456".split("(?<=[a-zA-Z])(?![a-zA-Z])", 2);
//=> [Nesc, 123abc456]
String[]arr=“Nesc123abc456”.split((?您可以使用:

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

String[]arr=“Nesc123abc456”。拆分((?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);
int split=string.length();
对于(int i=0;i
拆分是一个破坏性的过程,因此您需要找到第一个数字的索引并使用子字符串来获得结果。这也可能比使用正则表达式更快,因为它们背后有更多的启发

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);
int split=string.length();
对于(int i=0;i
我想这就是你问的问题:

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);
String s=“Abc1234avc”;
字符串编号=”;
字符串字符=”;
对于(int i=0;i
我想这就是你问的问题:

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);
String s=“Abc1234avc”;
字符串编号=”;
字符串字符=”;
对于(int i=0;i
OP希望拆分字符串
而不更改。它不会更改,因为字符串是不可变的。
replaceAll
返回新字符串抱歉…corr:OP希望拆分字符串的两部分。OP希望拆分字符串而不更改。它不会更改,因为字符串是不可变的。
replaceAll
返回新字符串gSorry…corr:OP需要字符串的两个部分。你说的“破坏性”过程是什么意思?当你按某个对象拆分时,它不包括在结果数组中。你说的“破坏性”是什么意思进程?当按某个对象拆分时,它不包括在结果数组中。量词在这里有什么帮助?这将仅从字符串中删除所有前导非数字。量词在这里有什么帮助?这将仅从字符串中删除所有前导非数字。