split(), split(String regex , int limit)的用法

司空瑾瑜
2023-12-01

split(), split(String regex , int limit)的用法

先看一下区别:

String a="a,b,";
String[] arr=a.split(",");
String[] arr1=a.split(",",-1);
System.out.println("length:"+arr.length+" ;内容:"+Arrays.asList(arr));
System.out.println("length:"+arr1.length+" ;内容:"+Arrays.asList(arr1));
length:2 ;内容:[a, b]
length:3 ;内容:[a, b, ]

对于split来说若分割符后面是空的,任何内容都没有,此时元素就会少一个,但添加limit参数为-1后,若分隔符后面没有内容也会是一个元素

split(String regex)

根据正则对字符串进行分割,默认调用split(regex,0)的方法,结尾符合分割字符为空不进行分割

//案例1
String a="a,b,c";
String[] arr=a.split(",");
System.out.println("length:"+arr.length+" ;内容:"+Arrays.asList(arr));
//案例2
a="a,b,";
arr=a.split(",");
System.out.println("length:"+arr.length+" ;内容:"+Arrays.asList(arr));
//案例3
a="a,b, ";
arr=a.split(",");
System.out.println("length:"+arr.length+" ;内容:"+Arrays.asList(arr));
length:3 ;内容:[a, b, c]
length:2 ;内容:[a, b]
length:3 ;内容:[a, b,  ]
  • 注意:示例中根据逗号,进行分割,但案例2中逗号后面没有任何内容分割后就只有两个元素了,案例3有一个空格所以空格成为了一个元素,项目中有些时候哪怕逗号后面没有内容,也需要是一个元素,此时可以采用split(",",-1)的形式

split(regex):若字符后面都是分隔符,没有内容,则后面的会自动去除;若字符前面都是分隔符,没有内容,不会自动去除内容

split(regex, limit): 若limit<0或limit>0时,若字符后面都是分隔符,没有内容,不会自动去除空内容
如下例:

String ss="a,,";
String sss[] =ss.split(",");//此时数组的长度只有1,后面的空格自动去除了
System.out.println("length:"+sss.length+" ;内容:"+Arrays.asList(sss));
ss = ",,3,,";
sss = ss.split(",");
System.out.println("length:"+sss.length+" ;内容:"+Arrays.asList(sss));//返回数组长度为3,前面空不自动去除

ss = "a,,";
sss = ss.split(",",3);
System.out.println("length:"+sss.length+" ;内容:"+Arrays.asList(sss));//返回长度为3,后面空不会被去掉

结果:

length:1 ;内容:[a]
length:3 ;内容:[, , 3]
length:3 ;内容:[a, , ]

split(String regex , int limit)

limit参数控制模式应用的次数,因此影响结果数组的长度。

  • 如果 n > 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。 (当 n> 0的时候,str将被分割 n - 1次)

  • 如果 n < 0,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。

  • 如果 n = 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。
    split(regex)方法,默认调用了split(regex, 0)的方法

String a="boo:and:foo";
String[] arr1=a.split(":",2);
System.out.println("length:"+arr1.length+" ;内容:"+Arrays.asList(arr1));
arr1=a.split(":",5);
System.out.println("length:"+arr1.length+" ;内容:"+Arrays.asList(arr1));
arr1=a.split(":",-1);
System.out.println("length:"+arr1.length+" ;内容:"+Arrays.asList(arr1));
arr1=a.split("o",2);
System.out.println("length:"+arr1.length+" ;内容:"+Arrays.asList(arr1));
arr1=a.split("o",5);
System.out.println("length:"+arr1.length+" ;内容:"+Arrays.asList(arr1));
arr1=a.split("o",-1);
System.out.println("length:"+arr1.length+" ;内容:"+Arrays.asList(arr1));
length:2 ;内容:[boo, and:foo]
length:3 ;内容:[boo, and, foo]
length:3 ;内容:[boo, and, foo]
length:2 ;内容:[b, o:and:foo]
length:5 ;内容:[b, , :and:f, , ]
length:5 ;内容:[b, , :and:f, , ]

分析:
1:第一个参数:第二个参数2的时候,字符会被分割1次(n-1),后面的内容不再进行分割,并且当作一个元素进行输出。
2: 第一个参数:第二个参数5的时候,字符最多只会被分割成三个数据,所以只会有三个元素
3:第一个参数o, 第二个参数-1的时候。第零个o到第一个o之间为b,第1个o到第二个o之间为空,第二个o到第三个o之间为:and:f ,第三个o到第四个o之间为空,第四个o到末尾的元素为空

多个分割符
split方法对字符串进行分割,同时也支持对多个字符串进行分割,用 | 连接多个分隔符。

示例:同时对,与@符进行分割

String ss="a,b@c";
String sss[] =ss.split(",|@");
System.out.println("length:"+sss.length+" ;内容:"+Arrays.asList(sss));

结果:

length:3 ;内容:[a, b, c]

转义
split方法中的regex参数对某些字符需要进行转义,例如上面说的连接符 | 以及其他的字符也需要进行转义。所谓转义就是在这些字符前面加双斜杠\\
需要转义的字符:.$|()[{^?*+\\

String ss="a.b.c";
String sss[] =ss.split("\\.");
System.out.println("length:"+sss.length+" ;内容:"+Arrays.asList(sss));

结果:

length:3 ;内容:[a, b, c]
  • 若分割字符为\则需要写为\\\\
 类似资料: