我爱java系列---【String.Split方法】

hello 大家好,好久不见,今天 我们要讨论的是java的split方法,或许你很早就知道了,但你真的知道吗?

我们来看看吧。

首先我们来看看我们最常用的split()方法也就是单个参数的方法

public String[] split(String regex) {
      return split(regex, 0);
}

卧槽,这不是重载方法嘛,调用的是另外一个方法,而且还给了个默认值0,然后我们来看看重载的哪个方法

public String[] split(String regex, int limit) {
    // Try fast splitting without allocating Pattern object
        String[] fast = Pattern.fastSplit(regex, this,limit);
        if (fast != null) {
            return fast;
        }
        return Pattern.compile(regex).split(this, limit);
}

???这一串啥东西,不管了,既然这个方法的重载到此,我们就看看这个最底层的方法怎么用的吧

int limit?这是啥?以下为API解释

limit 参数控制模式应用的次数,因此影响所得数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。

是不是有点活在自己世界的说法,没办法自己来试呗。

 注意:下面的测试请注意测试字符串的变化

1.默认方法测试,上面的代码可以看出,默认方法limit只是传的0而已。

废话不说,我们来上手测试 (注意我们的测试字符串最后一个逗号后面是空的

String str = "1,2,4,5,6,7,";
String[] strArr = str.split(",");

for(String s: strArr){
    System.out.println("分割:"+s);
}
System.out.println("数组长度:" + strArr.length);

输出结果:

分割:1
分割:2
分割:4
分割:5
分割:6
分割:7
数组长度:6

测试结果:按照理论分割的话,那么最后一个“,”后面的空不是也应该也被分割出来嘛,但是发现测试结果最后一个空格被去掉了,那么是省去了吗?

                  1.去掉最后一个空格不分割。

既然这样,那我拿多个空格在后面能去掉吗?

来测试

        String str = "1,2,4,5,6,7,,,";
        String[] strArr = str.split(",");

        for(String s: strArr){
            System.out.println("分割:"+s);
        }
        System.out.println("数组长度:" + strArr.length);

输出结果:

分割:1
分割:2
分割:4
分割:5
分割:6
分割:7
数组长度:6

测试结果:看来limit为0 时 分割的最后如果是空格,那么无论多少个空格都会被去掉

其他猜想:1.若中间出现空格会去掉吗? (如: 1,2,3,,4,5,6,7)

                  2.若开头出现空格会去掉吗? (如:,,1,2,3,4,5,6,7)

我就不贴代码了:1.中间的不会去掉空格,空格也会作为一个字符串存入分割后的数组中。

                             2.开头的空格也不会去掉,也做保留。

结论:当limit == 0 时,只有存在最后的空格会被去掉,其他的在中间和前面的都不会被去掉。

2.当limit > 0时 测试开始。

        String str = "1,2,4,5,6,7";
        String[] strArr = str.split(",",5);

        for(String s: strArr){
            System.out.println("分割:"+s);
        }
        System.out.println("数组长度:" + strArr.length);

输出结果

分割:1
分割:2
分割:4
分割:5
分割:6,7
数组长度:5

What ?   最后一个分割冒出了一个 "6,7" ?????啥玩意啊?

别急我们来看,这里的分割的个数是不是等于limit的填的数量?

果然 limit 等于 分割个数  那这个就简单了

测试结果:limit等于你要分割的份数。

其他猜想:1.如果limit > 最大分割的份数(比如 “1,2,3,4,5,6,7”最大的分割其实是7份,大于最大分割也就是大于7)会怎么样呢?

                  2.如果limit 是小数怎么办?  

结论:1.如果大于也只会按照最大的分割数分割。

           2.limit是整型,不能使用小数

2.当limit < 0时 测试开始。

        String str = "1,2,4,5,6,7,";
        String[] strArr = str.split(",",-1);

        for(String s: strArr){
            System.out.println("分割:"+s);
        }
        System.out.println("数组长度:" + strArr.length);

输出结果:

分割:1
分割:2
分割:4
分割:5
分割:6
分割:7
分割:
数组长度:7

哈哈看到了有意思的了,最后一个空格他没有屏蔽

后面也不买关子了

结论:如果limit为负数,就不会去掉任何分割后的字符,至于 -1 和-2 有什么区别,我现在还不能了解。

本文转载自:https://www.cnblogs.com/woaixingxing/p/10838546.html,怕以后找不到,就拷贝过来了,写的不错,我就不再写一次了,在这里给作者点赞!

原文地址:https://www.cnblogs.com/hujunwei/p/12343989.html

时间: 2024-10-03 20:55:50

我爱java系列---【String.Split方法】的相关文章

java String.split方法是用注意点(转)

转自:http://www.blogjava.net/fanyingjie/archive/2010/08/05/328059.html 在java.lang包中有String.split()方法,返回是一个数组我在应用中用到一些,给大家总结一下,仅供大家参考: 1.如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 2.如果用“|”作为分隔的话,必须是如下写法:Stri

我爱java系列---【自定义注解】

一.注解概述 1.定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类. 接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素 进行说明,注释. 2.作用分类: 编写文档:通过代码里标识的注解生成文档[例如,生成文档doc文档] 代码分析:通过代码里标识的注解对代码进行分析[例如,注解的反射] 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查[例如,Override] 3.常

Java里String.split需要注意的用法

我们常常用String的split()方法去分割字符串,有两个地方值得注意: 1. 当分隔符是句号时("."),需要转义: 由于String.split是基于正则表达式来分割字符串,而句号在正则表达式里表示任意字符. //Wrong: //String[] words = tmp.split("."); //Correct: String[] words = tmp.split("\\."); 所以,假设分隔符在正则表达式里有一定的意义时,需要格

字符串分割--java中String.split()用法

在java.lang包中有String.split()方法,返回是一个数组. 1.“.”和“|”都是转义字符,必须得加"\\"; 如果用“.”作为分隔的话,必须是如下写法: String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 如果用“|”作为分隔的话,必须是如下写法: String.split("\\|"),这样才能正确的分隔开,不能用String.split("

PL/SQL实现JAVA中的split()方法的小例子

众所周知,java中为String类提供了split()字符串分割的方法,所以很容易将字符串以指定的符号分割为一个字符串数组.但是在pl/sql中并没有提供像java中的split()方法,所以要想在pl/sql中实现字符串的分割还需要自己动手.由于在项目中需要用到此类方法,所以自己研究了一下,方便以后参考.这里以逗号作为分隔符为例,代码如下: 1 declare 2 v_str varchar2(200) := 'abd,324,u78,23f,sd09,2345,dsaf,9079'; 3

Java基础String的方法

Java基础String的方法 字符串类型写法格式如下: 格式一: String 变量名称; 变量名称=赋值(自定义或传入的变量值); 格式二: String 变量名称=赋值(自定义或传入的变量值);在输出时任何数据类型与字符串进行拼接,结果一般是字符串 1 public class StringFunc { 2 3 public static void main(String[] args){ 4 //字符串拼接 5 String str1; 6 str1 = "hello"; 7

C# String.split()用法小结。String.Split 方法 (String[],?StringSplitOptions)

split()首先是一个分隔符,它会把字符串按照split(' 字符')里的字符把字符串分割成数组,然后存给一个数组对象. 输出数组对象经常使用foreach或者for循环. 第一种方法 string s=abcdeabcdeabcde; string[] sArray=s.Split('c') ; foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab deab deab de 第二种方法 我们看到了结果

Java 的 String.split 函数,消除空字符串

代码: String str = "the music made   it   hard      to        concentrate"; String delims = "[ ]+"; String[] tokens = str.split(delims); 结果为: the, music, made, it, hard, to, concentrate 原因: String.split(String regex):参数是一个正则表达式 转自:http:/

高效使用String.split方法

首先来看split的源码: public String[] split(String regex, int limit) {    /* fastpath if the regex is a     (1)one-char String and this character is not one of the        RegEx's meta characters ".$|()[{^?*+\\", or     (2)two-char String and the first c