我的要求就像是,将给定的字符串拆分为章程和数字值的子字符串。 并且输入值将始终仅开始包机。
输入:String strValue = "ABCD12345";
出局:
A1 = ABCD
A2 = 12345
答案 0 :(得分:2)
您需要使用外观断言。
String s = "ABCD12345";
String parts[] = s.split("(?<=[A-Za-z])(?=\\d)");
System.out.println(Arrays.toString(parts));
(?<=[A-Za-z])(?=\\d)
正则表达式将匹配字母和数字之间存在的边界。根据匹配的边界拆分将为您提供所需的输出。
输出:
[ABCD, 12345]
答案 1 :(得分:0)
这可能是一些错误,可能不是最有效的,但这里是一个特殊的镜头。当然欢迎反馈。
var char;
var = num;
str = "somestring23498";
for(i=1:1=str.length - 1;i++){
if ((typeof str[i] + 1) == "string"){
char = char + str[i];
} else if((typeof str[i] + 1) == "integer"){
num = num + str[i];
}
}
答案 2 :(得分:0)
您也可以在char boundary之间创建一个带空格或分隔符的char缓冲区。
String str =&#34; ABCD1234cda209ad&#34 ;;
char[] chars = new char[2*str.length()];
int i=0;
boolean isPrevcharANum = false;
for(char c:str.toCharArray()){
if(Character.isDigit(c)){
if(!isPrevcharANum){
chars[++i] = ' ';
}
isPrevcharANum = true;
}else{
if(isPrevcharANum){
chars[++i] = ' ';
isPrevcharANum = false;
}
}
chars[++i] = c;
}
System.out.println("Output : "+new String(chars));
输出:ABCD 1234 cda 209 ad
答案 3 :(得分:0)
再次使用正则表达式,但更短
String parts[] = s.split("(?<=\\D)(?=\\d)"); // [ABCD, 12345]
在内部,split()
使用Pattern
查找拆分位置。花括号的第一部分是正向后看。
\D
与\d
相对,表示每个字符,除了一个数字。
花括号的第二部分是正向超前 \d
,这意味着此处必须是数字。
因此,当位置的左边是数字以外的任何字符并且同时在该位置有一个数字时,就会进行分割。