一、方法

1、通过indexOf和substring这两个方法实现字符串分割

实现逻辑:

利用indexOf找出分割的字符在字符串中的位置,根据分割字符的位置切割字符串,再将分割好的字符串放进结果集。

实现代码如下:

/*** @Description: 通过indexof分割字符串

* @Param: [str, regx]

*@return: java.lang.String[]

* @Author: YinYichang

* @Date: 2018/7/18*/

public staticString[] splitByIndex(String str, String regx) {//字符串截取的开始位置

int begin = 0;//字符串截取的结束位置

int limit = 0;//截取分割得到的字符串

String splitStr = "";

ArrayList result = new ArrayList();while (str.indexOf(regx) != -1) {//设置要截取的位置

limit =str.indexOf(regx);

splitStr=str.substring(begin, limit);//设置截取后的字符串

str = str.substring(limit + 1, str.length());

result.add(splitStr);

}if (!StringUtil.isBlank(str)) {

result.add(str);

}

String[] strs= newString[result.size()];returnresult.toArray(strs);

}

2、通过charAt和substring这两个方法实现字符串分割

实现逻辑:

同上,通过charAt方法找出字符所在字符串中的位置,再实现如同方法1的逻辑即可得到分割后的字符串结果集。

实现代码如下:

/*** @Description: 通过charAt分割字符串

* @Param: [str, regx]

*@return: java.lang.String[]

* @Author: YinYichang

* @Date: 2018/7/18*/

public static String[] splitByCharAt(String str, charregx) {//字符串截取的开始位置

int begin = 0;//截取分割得到的字符串

String splitStr = "";

ArrayList result = new ArrayList();int length =str.length();//计数器

int i = 0;for (i = 0; i < length;i++) {if (str.charAt(i) ==regx) {

splitStr=str.substring(begin, i);

result.add(splitStr);

str= str.substring(i + 1, length);

length=str.length();

i= 0;

}

}if (!StringUtil.isBlank(str)) {

result.add(str);

}

String[] strs= newString[result.size()];returnresult.toArray(strs);

}

3、通过java自带的split方法分割字符串

4、通过StringTokenizer对字符串进行分割

通过这种方法分割字符串的使用频率比较少,这种分割需要创建新的对象(对内存造成不必要的开支),虽然该方法提供了提取分割结果的方法,但是也比较麻烦并没有数组那么简单。

/*** @Description: 通过StringTokenizer分割字符串, 该方

* 法分割后将结果封装并提供相关方法提取(很少用到)

* @Param: [str, regx]

*@return: StringTokenizer

* @Author: YinYichang

* @Date: 2018/7/18*/

public staticStringTokenizer splitByStringTokenizer(String str, String regx) {

StringTokenizer stringTokenizer= newStringTokenizer(str, regx);returnstringTokenizer;

}

二、性能测试

由于StringTokenizer很少用到就不测试了,主要测试两种自定义的分割方法和java自带的方法。

测试代码如下:

String str = "a,b,c,d,e,f,g";

System.out.println("测试代码循环10000次。。。,结果如下:");long length = 10000;//indexof字符串分割测试

long begin =System.currentTimeMillis();for (int i = 0; i < length; i++) {

String[] strs= SplitStr.splitByIndex(str, ",");

}long end =System.currentTimeMillis();

System.out.println("indexof分割字符串返回数组用时:"+(end -begin));//charAt字符串分割测试

begin =System.currentTimeMillis();for (int i = 0; i < length; i++) {

String[] strs= SplitStr.splitByCharAt(str, ',');

}

end=System.currentTimeMillis();

System.out.println("charAt分割字符串返回数组用时:"+(end -begin));//split字符串分割测试

begin =System.currentTimeMillis();for (int i = 0; i < length; i++) {

String[] strs= str.split(",");

}

end=System.currentTimeMillis();

System.out.println("split分割字符串用时:"+(end - begin));

测试结果:

以上测试结果,分别对三种方法循环测试1000次、10000次和100000次,由结果可以看出利用charAt分割字符串的效率是最高的。

其实,查看split方法的实现代码后发现,split采用的分割方式是和自定义的第一种方式类似的,可以看出中两者的差距不是特别大。

代码优化任重道远,如有问题希望给与指正!

java8 多行字符串_Java8字符串分割的几种方式及性能比较相关推荐

  1. java equals 判断空_Java 判断字符串是否为空的三种方法与性能分析

    [java中判断字符串是否为数字的三种方法  1>用JAVA自带的函数 public static boolean isNumeric(String str){   for (int i = s ...

  2. js中将字符串转换成json的三种方式

    ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5) 中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法. 1,eval方式解析,恐 ...

  3. unicode和字符串之间的转换有两种方式

    unicode和字符串之间的转换有两种方式. 1.1.通过JDK自带的"native2ascii"进行转换     首先,您测试的机器需要安装JDK,比如我的机器环境,我的JDK安 ...

  4. 关于 Java 字符串拼接的几种方式以及性能比较

    一.字符串拼接 字符串拼接是我们在Java代码中比较经常要做的事情,就是把多个字符串拼接到一起. 我们都知道,String 是 Java 中一个不可变的类,所以他一旦被实例化就无法被修改. 不可变类的 ...

  5. python格式化字符串_Python笔记7:三种方式构建字符串-格式化

    主要内容: 小目标:掌握字符串 主要内容:字符串格式化,占位符 字符串非常重要,只要做编程,你不可能离开字符串 如果看完这篇文章,你还是弄不明白格式化: 你来找我,我保证不打你,我给你发100的大红包 ...

  6. 字符串转换成json的三种方式

    使用ajax的开发项目过程中,经常需要将json格式的字符串返回到前端,前端解析成js对象(JSON ). ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5)  ...

  7. 学习路之JavaScript----JS字符串拼接的几种方式及其性能比较

    用的最多的是 : 使用连接符 "+" 把要连接的字符串连起来 let seconds=5;/ this.setState({btnText:'重新获取('+seconds+')s' ...

  8. 字符串转int数据类型的三种方式

    方法一: Integer.valueOf( ) 它将返回一个包装器类型 Integer,当然可以通过自动拆箱的方式将其转成 int 类型. String a = "100"; St ...

  9. 怎么把好几行弄成一行_将多行内容合并成一行的两种方式

    在利用Unix操作系统在实现一些具体应用的时候,可能需要把某些显示的结果进行行与行之间的合并.如现在需要用Unix操作系统设计一个彩票软件,每一张彩票上最多可以打印五注内容.在Unix操作系统的数据文 ...

最新文章

  1. 道家遁甲式(又名道家奇门)
  2. Python3 websocket server与client
  3. 第十六章、Raid及mdadm命令
  4. Java:计算类的serialVersionUID
  5. git add remote_最全的git常用命令(建议收藏)
  6. 李开复离职后谷歌将在中国消亡
  7. PHP 中使用工厂模式
  8. 计算机组成原理实验内存读数,计算机组成原理实验
  9. -Java基础-方法
  10. Stream - Web大文件上传插件
  11. 从技术到求职,强烈推荐一下这9个牛逼的公众号,技术人必备
  12. win32汇编动态链接库的编写及使用
  13. UTM坐标与wgs84坐标转换关系
  14. C语言学习 7-9 统计素数并求和
  15. 二维数组传参(二维数组作为函数参数)
  16. 教你电脑休眠如何取消
  17. [1049]since it exceeds Excel‘s limit of 65,530 URLS per worksheet
  18. 《计算机工程》投稿过程
  19. Debug python - Segmentation fault (core dumped)
  20. python twisted教程_twisted基础教程.pdf

热门文章

  1. 推荐系统 - 召回 - 关联规则挖掘 (association rule)
  2. 软件工程笔记:唯一不变的是变化
  3. ug894 中文文档 | Xilinx
  4. 【程序人生】两个好消息:1万粉丝+周榜第四
  5. java 前后端解压缩字符串_接口实现后台GZIP压缩,pako.js 前端解压
  6. Word文字怎么修改字体颜色
  7. 轻松实现在浏览器上播放本地视频
  8. 成立四年,小鱼在家终于走到了主战场上
  9. 每日新闻丨年底5G套餐用户将达300万;科大讯飞开发通过声音识别身份
  10. Android VR View 入门