【新手笔记】关于Split方法

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个元素返回,后面的都扔掉。执行结果如图:

原创文章,转载请注明出处。

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android机动车

Android热修复简单总结

DexClassLoader -> DexPathList -> DexFile -> -> Element -> dexElements.add(elemen...

822
来自专栏Python中文社区

Python多进程并行编程实践:以multiprocessing模块为例

專 欄 ❈Pytlab,Python 中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,...

4119
来自专栏服务端思维

跨域问题,解决之道

跨域问题,是由于JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。换句话说,只有JavaScript存在跨域问题。

691
来自专栏小詹同学

Leetcode打卡 | No.008 字符串转整数

欢迎和小詹一起定期刷leetcode,每周一和周五更新一题,每一题都吃透,欢迎一题多解,寻找最优解!这个记录帖哪怕只有一个读者,小詹也会坚持刷下去的!

783
来自专栏互联网杂技

React数据流和组件间的通信总结

首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则。 先介绍单向数据流吧。 React单向数据流:   React是单向数据流,数据主要...

3457
来自专栏企鹅号快讯

如何提升Java应用程序性能

作者 | Eugen Paraschiv 翻译 | 雁惊寒 【摘要】本文首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代...

2078
来自专栏企鹅号快讯

Kotlin 1.2 的新增特性

转自:开源中国 www.oschina.net/translate/whats-new-in-kotlin-12 多平台项目 (实验性) 多平台项目是 Kotl...

1837
来自专栏喔家ArchiSelf

全栈必备 Java基础

那一年,从北邮毕业,同一年,在大洋的彼岸诞生了一门对软件业将产生重大影响的编程语言,它就是——Java。1998年的时候,开始学习Java1.2,并在Java ...

764
来自专栏会跳舞的机器人

ZooKeeper典型应用场景一览(转)

ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得Z...

651
来自专栏程序员八阿哥

王老板Python面试(4):Python面试攻略(嗨谈篇)

答:*args表示可变参数(variadic arguments),它允许你传入0个或任意个无名参数,这些参数在函数调用时自动组装为一个tuple; **kwa...

822

扫码关注云+社区