nodejs可以做网站吗,xv10相同网站,建一个鲜花买卖网站多少钱,网站二级联菜单怎么做文章目录split()底层原理1.举例说明2.split源码分析3.API原解4.regex参数API原解5.limit参数介绍6.结果的验证7.此方法的使用split方法的使用split用法分析参数解释—regex参数解释—limit不同limit值的情况下的split结果验证扩展split()底层原理
1.举例说明
1.最普通的用法 …
文章目录split()底层原理1.举例说明2.split源码分析3.API原解4.regex参数API原解5.limit参数介绍6.结果的验证7.此方法的使用split方法的使用split用法分析参数解释—regex参数解释—limit不同limit值的情况下的split结果验证扩展split()底层原理
1.举例说明
1.最普通的用法
String str1 aa,bb;
String[] split1 str1.split(,);
System.out.println(split1.length);
//这个结果是2,都知道的2.比较普通的用法
String str2 ;
String[] split2 str2.split(,);
System.out.println(split2.length);
//这个结果是1,但部分人会认为这个的结果是0,
//这个为什么是1,我会在后面说3.看起来比较奇怪的用法
String str3 ,;
String[] split3 str3.split(,);
System.out.println(split3.length);
//这个结果是0,但部分人会认为结果是1,部分人会认为结果是2.
//这个又为什么是0,我也会在后面说2.split源码分析
split方法准确的来说有两个参数(String regex, int limit),只不过平时我们用的,是split的一个重载方法(String regex),默认是把第二个参数设置为0,源码如下:
public String[] split(String regex) {return split(regex, 0);
}public String[] split(String regex, int limit) {具体实现...
}3.API原解
此方法返回的数组包含此字符串的每个子字符串这些子字符串由给定表达式匹配的另一个子字符串终止或在字符串结尾处终止数组中的子字符串按它们在此字符串中出现的顺序排列如果表达式与输入的任何部分都不匹配则结果数组只有一个元素即此字符串。
上面这段话你可能会很蒙看一下下面的例子你就明白了
注意:空字符串也是一个字符串
4.regex参数API原解
将此字符串拆分为给定正则表达式的匹配项。
5.limit参数介绍
api是这样说的: (1)limit参数控制应用模式的次数因此影响结果数组的长度 (2)如果限制n大于零则模式将最多应用n-1次数组的长度将不大于n数组的最后一项将包含最后一个匹配分隔符以外的所有输入 (3)如果n为非正数则模式将被应用尽可能多次并且数组可以具有任何长度 (4)如果n为零则将尽可能多次应用该模式数组可以有任何长度并且将丢弃尾随的空字符串。
简单的理解为: limit 参数通过控制分割次数从而影响分割结果 如果传入 limit (limit 0) 那么字符串最多被分割 limit -1 次,分割得到数组长度最大是 limit 数组的最后一项将包含最后一个匹配分隔符以外的所有输入(这句话的解释看后面的例子很重要) 如果 limit -1 将会以最大分割次数分割 如果 limit 0 将会以最大分割次数分割,但是分割结果会丢弃尾随的所有空字符串
6.结果的验证
(1)我们先介绍一下limit0的时候
public class split {public static void main(String args[]) {String line ,aa,bcd,eef,,ss,;String[] split line.split(,,0);System.out.println(split.length);}
}dubug之后 结果证明尾随的空字符串被丢弃那我们继续证明到底是不是所有的尾随字符串都被丢弃
上代码:
public class split {public static void main(String args[]) {String line ,aa,bcd,eef,,ss,,;String[] split line.split(,,0);System.out.println(split.length);}
}dubug之后
果然尽可能大的分割最后的两个空字符串都被丢弃了
(2)limit4的时候
public class split {public static void main(String args[]) {String line ,aa,bcd,eef,,ss,,;String[] split line.split(,,4);System.out.println(split.length);}
}dubug之后 结果验证了上面的那句话数组的最后一项将包含最后一个匹配分隔符以外的所有输入 因为最多分割limit-1次所以找到分割到第三次时的,,包含后面的所有输入
(3)limit-1的时候
public class split {public static void main(String args[]) {String line ,aa,bcd,eef,,ss,,;String[] split line.split(,,-1);System.out.println(split.length);}
}dubug之后 结果证明 limit -1 将会以最大分割次数分割
7.此方法的使用
如果用“.”作为分隔的话必须是如下写法String.split(“\.”),这样才能正确的分隔开不能用String.split(“.”); 2、如果用“|”作为分隔的话必须是如下写法String.split(“\|”),这样才能正确的分隔开不能用String.split(“|”); “.”和“|”前面必须加\才可以起到转义的作用。 3、如果在一个字符串中有多个分隔符可以用“|”作为连字符比如“a1 and b 2 or c3”,把三个都分隔出来可以用String.split(“and|or”);
我们来看个例子:
String words[]str.split(\\s|\\.); 这个是很么意思呢 使用一个或多个空格分隔和用逗号分隔
解释如下: s表示 空格,回车,换行等空白符 号表示一个或多个的意思 |表示分隔符 使用的时候记得加上两个斜杠哦 split方法的使用
split用法
先上一个例子:
1.最普通的用法String str1 aa,bb;String[] split1 str1.split(,);System.out.println(split1.length);//这个结果是2,都知道的
2.比较普通的用法String str2 ;String[] split2 str2.split(,);System.out.println(split2.length);//这个结果是1,但部分人会认为这个的结果是0,//这个为什么是1,我会在后面说
3.看起来比较奇怪的用法String str3 ,;String[] split3 str3.split(,);System.out.println(split3.length);//这个结果是0,但部分人会认为结果是1,部分人会认为结果是2.//这个又为什么是0,我也会在后面说分析
split方法准确的来说有两个参数(String regex, int limit),只不过平时我们用的,是split的一个重载方法(String regex),默认是把第二个参数设置为0,源码如下: public String[] split(String regex) {return split(regex, 0);}public String[] split(String regex, int limit) {具体实现...}参数解释—regex
1.如果表达式不匹配输入的任何内容返回的数组只具有一个元素即此字符串。尤其注意空字符串这种情况他也是一个字符串 2.可以匹配的情况下每一个字符串都由另一个匹配给定表达式的子字符串终止或者由此字符串末尾终止数组中的字符串按照他们在此字符串出现的顺序排列
参数解释—limit
该参数用于控制模式匹配使用的次数可以影响到数组的长度 1.limit0: 模式匹配将被最多应用n-1次数组的长度将不会大于n数组的最后一项将包含所有超出最后匹配的定界符的输入。 2.limit0: 模式匹配将应用尽可能多的次数而且数组的长度是任何长度。 3.lilmit0: 模式匹配将被应用尽可能多的次数数组可以是任何长度并且结尾空字符串将被丢弃。
不同limit值的情况下的split结果验证
假设有字符串aa,bcd,eef,
limit0,regex“,” 尾部的逗号直接被忽略头部的逗号不会忽略
String line ,aa,bcd,eef,,,;
String[] split line.split(,,0);
System.out.println(split.length);//4limit2,regex“,” 总长度被限制成最大2个
String line ,aa,bcd,eef,,,;
String[] split line.split(,,2);
System.out.println(split.length);//2limit100,regex“,” 总长度被限制成最大100个 但结果是7个说明当limit大于0并且远大于应该有的长度时头部和尾部的逗号都没有被忽略
String line ,aa,bcd,eef,,,;
String[] split line.split(,,100);
System.out.println(split.length);//7limit-1,regex“,” 结果是7个说明当limit小于0时头部和尾部的逗号都没有被忽略
String line ,aa,bcd,eef,,,;
String[] split line.split(,,100);
System.out.println(split.length);//7扩展
谷歌的guava包也有对split的重写返回的是list数组集合. 具体使用如下 dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion24.1-jre/version/dependency
12345
String line ,aa,bcd,eef,,,;
ListString split2 Splitter.on(,).splitToList(line);
System.out.println(split2.size());//7根据结果我们可以看到谷歌的split默认是头部和尾部的逗号都没有被忽略相当于java包下split的limit设置为-1
相比下java包下split的limit默认不写就是0即头部逗号没有被忽略而尾部逗号是被忽略的
一定要注意区分