程序员在开发中都离不开对字符串的操作,相信大家的StringUtils工具类里写了不少以某种字符分割字符串方法。
诸如:
那么有没有不用指定字符去分割的方法呢?
下面来分析分析:
方式一:通过枚举标点符号;但是这种方案过于死板不够灵活
方式二:通过正则;这种方法还行,但是不够骚
上面两种方案都被我否定之后,唯有ASCII码值被我相中了!
talk is cheap show the code :
/**
*将含有任意中英文标点符号的字符串以任何标点分割并返回List集合
*例如: splitWithAnyChracter("WX009R ;WX0082, ,sao*cao,zuo=666")
*->
*返回:[WX009R, WX0082, sao, cao, zuo, 666]
*@param source 源字符串
*@return List<String>
*@author wuqx
*@throws
*/
public static List<String> splitWithAnyChracter(String source){
if (StringUtils.isBlank(source)) return null;
List<String> rs = new ArrayList<String> ();
try {
if(Utils.isChinese(source)){
source = StringUtils.full2HalfChange(source);
}
char[] chars = source.toCharArray();
int k = 0 ;
boolean flag = false;
for(int i =0 ; i< chars.length ; i++){
char c = chars[i];
if(Integer.valueOf(c) != null && ((Integer.valueOf(c)>=32 && Integer.valueOf(c)<=47) || (Integer.valueOf(c)>=58 && Integer.valueOf(c)<=64)) ){
String niceStr = StringUtils.trim(StringUtils.substring(source, flag ? k+1 : k, i));
if(StringUtils.isNotBlank(niceStr)){
rs.add(niceStr);
}
k = i;
flag = true;
}
}
String lastChar = StringUtils.substring(source, flag ? k+1 : k, chars.length);
if(StringUtils.isNotBlank(lastChar)){
rs.add(lastChar);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return rs;
}
点我查看全角转半角方法:StringUtils.full2HalfChange(str)
测试代码及测试结果:
以后来的字符串还管他是用什么标点分割的呢,nice。