求算法分割字符串为数组将字符串分割为三个元素的数组,如 Abc2.13张三 分割成 Abc 2.13 张三Abc张三 分割成 ABC张三 “” “”张三23李四1.5 分割成 张三23李四 1.5 “” 以此,我的需求是对类似的东西进行拖拽,增加最后面的数组,如果没有数字表示从零开始。如果中间有数字,从最后的数字开始递增货递减,所以有上面的需求。算法
调试欢乐多
如果最后边的字符不是数字,则继续往前找,如果前面找到数字,则分为三部分,最前的数字之前的,然后就是中间的数字,最后是数字之后的 字符如果字符里没有数字,则直接作为一个部分,不需要处理。注意数字也需要支持小数的数字。
例如分割实例效果如下分割的字符 分割后的效果
23Def 空格 23 def
Ab23cde Ab 23 cde
Abcde Abcde
Abc23deff223gh Abc23deff 223 gh
Ab23 Ab 23
* 测试用例
*/
public static void main(String[] args) {
final String message = "Abc2.13张三";
String [] result = split(message);
for(String sub :result){
System.out.println(sub);
}
} private static final String DIGITs = "1234567890.";
public static String[] split(String message) {
if(message==null)return null;
char[] msg = message.toCharArray();
int endIndex = msg.length;
for(;endIndex>0 && DIGITs.indexOf(msg[endIndex-1])<0;endIndex--);
int beginIndex = endIndex;
for(;beginIndex>0 && DIGITs.indexOf(msg[beginIndex-1])>=0;beginIndex--);
if(beginIndex==endIndex)return new String[]{message};
if(endIndex==msg.length)return new String[]{message.substring(0,beginIndex),message.substring(beginIndex,endIndex)};
return new String[]{message.substring(0,beginIndex),message.substring(beginIndex,endIndex),message.substring(endIndex)};
}}
public static void main(String...args) throws Exception{
String s="张三23李四1.5王五";
int sep1=-1,sep2=-1;
for(int i=s.length()-1;i>=0;i--){
char c=s.charAt(i);
if('0'<=c&&c<='9'){
if(sep2<0) sep2=i+1;
}else if(c=='.') ;
else if(sep2>0){
sep1=i+1;
break;
}
}
String s1=sep1>0?s.substring(0,sep1):s;
String s2=sep1>0?s.substring(sep1,sep2):"";
String s3=sep2>0?s.substring(sep2):"";
System.out.println(s1+" , "+s2+" , "+s3);
}