Java中有很多方法,都有一些自己的小窍门和使用误区,今天小编在写程序的时候,就遇到了一个小问题,当使用split分隔一个字符串的时候,总是得不到自己想要的结果,于是小编翻阅API,最终将问题得以解决,不过没费多长时间,小编也特意深入了解了一下split的内部机制,下面就把解决这个问题的心得以及使用时一些相关的误区总结一下,分享给各位技术君,希望在以后的工作中,能让你们少走些弯路。
众所周知,在java.lang包中有String.split()方法,其结果返回是一个数组,相信很多小伙伴在开发过程中会经常用到。
需要分隔一个字符串时,直接调用split()方法即可。
public class SplitTest {
public static void main(String[] args) {
//一般分割
String a="hello world";
String[] array=a.split(" ");
System.out.println(array[0]);
System.out.println(array.length);
}
返回结果如下:
hello
2
特殊情况有 * ^ : | . \,当我们使用这些特殊字符的时候,如果没有注意,就有可能会得到一些偏离我们预期的结果,当然,对有经验的大牛来说,这些都是毛毛雨了。
例如:String str="hello*world";
String str="hello*world";
String[] str=str.split("\\*");
System.out.println(str[0]+str[1]);
String str="hello^world";
String[] str=str.split("\\^");
System.out.println(str[0]+str[1]);
String str="hello:world";
String[] str=str.split("\\:");
System.out.println(str[0]+str[1]);
String str="hello|world";
String[] str=str.split("\\|");
System.out.println(str[0]+str[1]);
String str="hello.world";
String[] str=str.split("\\.");
System.out.println(str[0]+str[1]);
String str="hello\world";
String[] str=str.split("\\");
System.out.println(str[0]+str[1]);
String str="hello^world@ni#hao";
String[] str=str.split("\\^|@|#");
System.out.println(str[0]+str[1]+str[2]);
总结:
(1)split表达式,其实就是一个正则表达式。* ^ | 等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即\\加以转义。
(2)如果使用多个分隔符则需要借助 | 符号,需要转义符的仍然要加上分隔符进行处理。
字符串末尾分隔符不能识别
例如:
public static void main(String[] args) {
String str="hello,world,";
String[] str=str.split(",");
}
通过这种方式,得到的数组元素个数只是两个,最后一个","后没有内容,它没有作为空字符串成为第三个数组元素,结尾的空字符串被丢弃了!这个函数还有另一种重载方式 :public String [] split (String regex, int limit) ,API中是这么解释的:
limit 参数控制模式应用的次数,因此影响所得数组的长度。
如果该限制 n 大于 0,则模式将被最多应用 于n - 1 次,数组的长度将不会大于 n ,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。
如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。
如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。
而对于函数 public String [] split (String regex)该方法的作用就是使用给定的表达式和限制参数 0 来调用两参数 split方法。因此,所得数组中不包括结尾空字符串。
所以如果不想让结尾的空字符串被丢弃,那么应该这样写:
public static void main(String[] args) { String str="hello,world,"; String[] str=str.split(",",-1); }优培东方送你一张内部需求跟踪矩阵: 内部需求跟踪矩阵 项目名称: 准备日期:
| 编号 | 商业需求 | 排序 | 来源 | 编号 | 技术需求 | 排序 | 来源 |
第1页/共1页
首页>


粤公安备案 44010602008731号