我在最近编程的过程中使用了String.split(String regex)这个方法,发现当一个字符串包含许多连续重复的regex时,split(String regex)方法就会产生很多空字符串,比如以下代码:
//创建一个字符串
String str1=new String("jaaaaaavaaaaaa");
//以“a”为分界线分割str1
String[] strArray=str1.split("a");
//输出strArray以及每一项字符串的长度
for(int i=0;i<strArray.length;i++)
System.out.println(strArray[i]+strArray[i].length());
这段代码旨在用"a"来分割str1,并输出分割产生的子字符串和子字符串的长度。
由输出结果可以看出,split(String regex)方法排除了"v"之后的“a”之间产生的空字符串,但在"j"和"v"的范围内,两个“a”之间仍然会产生长度为0的空子字符串。
这种现象是符合split(String regex)自身作用规律的,但是在java程序的编写和实际应用中,我们常常只需要从原字符串中分割产生非空的子字符串,而不希望看到空子字符串的产生。
所以我利用split(String regex)编写了一个新方法,用来返回不含有空字符串的子字符串数组,分享给大家。
//除去空字符串的字符串切割
public static String[] custSplit(String origin,String regex)
{
String[] firstArray=origin.split(regex);
List<String> strList=new ArrayList<String>();
for(int i=0;i<firstArray.length;i++)
{
if(firstArray[i].length()!=0)
strList.add(firstArray[i]);
}
String[] resultArray=strList.toArray(new String[strList.size()]);
return resultArray;
}
方法的参数1:待分割的字符串
参数2:作为分割线的字符串(正则表达式)
这个方法的思路非常简单,先用split(String regex)方法分割字符串,再从中将非空元素存入列表,最终将列表转化为字符串数组并返回。
这个方法思路简单,很容易编写。不过作为编程小白的我,第一次用java语言编写实用的小方法,还是很有纪念意义的。故上传博客,记录下自己的想法,也希望能够帮助到更多像我一样的初学者。