Split,把一个字符串分割成字符串数组。
以前是做C#的,前段时间做安卓开发,用了一下Split方法,发现分割后的长度比预期的少,检查了一下,发现java中的split方法和C#中的Split方法不太一样。
JAVA代码:
String string="abacadafaaa";
String[] strings =string.split("a");
结果:
strings为{"","b","c","d","f"},长度5。
C#代码:
string str = "abacadafaaa";
string[] strs = str.Split('a');
结果:
strs为{"","b","c","d","f","","",""},长度为8,如图
了解了一下,java的split方法,在只传一个参数的情况下,会把末尾的空元素去掉,但是开头和中间的不会,C#不会。于是查了资料,研究了一下。
----------
先说C#的Split方法(注意首字母大写):
string的Split有6个重载方法,返回值均为String[]类型,分别是:
Split(params char[] separator)
Split(char[] separator, int count)
Split(char[] separator, StringSplitOptions options)
Split(char[] separator, int count, StringSplitOptions options)
Split(String[] separator, StringSplitOptions options)
Split(String[] separator, int count, StringSplitOptions options)
其中,StringSplitOptions就是控制是否移除空元素的参数,如果设置为移除空元素,那么不管是前面还是中间还是结尾,所有的空元素都会移除。count 是拆分之后的数组最大长度。每个方法执行一遍,结果看图:
除了以上方法,C#还有支持正则表达式的拆分方法,这些方法在Regex类下,共有3个重载方法,返回值也都是String[]类型,它们分别是:
Split(string input, string pattern)
Split(string input, string pattern, RegexOptions options)
Split(string input, string pattern, RegexOptions options, TimeSpan matchTimeout)
里面的input是要分割的字符串,pattern是正则表达式,字符串会按照该表达式匹配的内容进行分割,options是匹配选项,matchTimeout是超时时间,如果超过该时间仍然没有匹配到,那么将引发异常(RegexMatchTimeoutException)。关于options,该枚举共有10个值,None不指定任何选项,IgnoreCase不区分大小写,Multiline多行模式,Compiled将正则表达式编译为程序集,Singleline单行模式,RightToLeft从右向左,CultureInvariant忽略区域性差异。其他具体的我也不太明白,用到再研究吧。不能发链接,自己去微软官网找一下吧……
注:Regex.Split方法没有去除空元素的参数。用法和结果如图:
----------
接着说说java中的split方法:
在java中的String.split方法,参数均为正则表达式,比如想要按照竖线()分割,参数要写"\\"。共有两个重载:
split(regularexpression)
split(regularexpression,intcount)
其中count指定结果最大长度,和上面C#的是一样的。
如果count为-1,将不会自动去掉空元素。
如果参数写成了竖线,结果将会是:
正确的写法如下:
----------
javascript中的split用法为:
string.split(separator,count)
其中,separator为分隔符,可以是字符串,也可以是正则表达式;count为返回值最大长度,与JAVA和C#不同,JAVA和C#会把后面的字符串放一起当做最后一个元素,而js会把所有分割玩的字符串的前count个元素返回,后面的都扔掉。执行结果如图:
原创文章,转载请注明出处。
本文来自企鹅号 - 全球大搜罗媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - 全球大搜罗媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。