我想分割一个字符串,以便我开始按字母顺序排列字符串(直到出现第一个数字)。和另一个字母数字字符串。
E.g: 我有一个字符串例如:Nesc123abc456
我希望通过拆分上面的字符串来获得两个字符串:Nesc,123abc456
我尝试了什么:
String s = "Abc1234avc";
String[] ss = s.split("(\\D)", 2);
System.out.println(Arrays.toString(ss));
但这只是删除字符串中的第一个字母。
答案 0 :(得分:4)
您可以使用外观,以便不使用分隔部分:
String s = "Abc1234avc";
String[] ss = s.split("(?<=\\D)(?=\\d)", 2);
System.out.println(Arrays.toString(ss));
(?<=\\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);