例如:String str = “1,2,3,4,5,6,a,b,c”;
方法一:
String[] strArr= str.split(“,”);

方法二:
使用 StringTokenizer

String str = "1,2,3,4,5,6,a,b,c";
StringTokenizer token = new StringTokenizer(str, ",");
String [] strArr = new String[token.countTokens()];
int i=0;
while(token.hasMoreElements()){strArr[i++]=token.nextToken();
}

关于两者的比较
String.Split()使用正则表达式,而StringTokenizer的只是使用逐字分裂的字符。

StringTokenizer在截取字符串中的效率最高.但自己在做测试的时候,分割1两千万以内的字符串,感觉二者时间开销区别不大,甚至 split()花的时间很多时候比StringTokenizer所花的时间还少。但是大于两千万以后,split()方法会执行很长很长时间,甚至上个厕所回来还没执行完。

以下为测试代码:

1、使用split()

StringBuffer sb = new StringBuffer("a");
for (int i = 0; i < 10000000; i++) {sb.append(",");sb.append("a");
}
String str= sb.toString();
System.out.println(new Date());
String[] strArr= str.split(",");
System.out.println(new Date());

控制台打印:

                Fri Dec 14 11:20:46 CST 2018Fri Dec 14 11:20:49 CST 2018

2、使用StringTokenizer

StringBuffer sb = new StringBuffer("a");
for (int i = 0; i < 10000000; i++) {sb.append(",");sb.append("a");
}
System.out.println(new Date());
StringTokenizer to = new StringTokenizer(str,",",true);
String[] re = new String[to.countTokens()];
int i=0;
while(to.hasMoreElements()){re[i++] = to.nextToken();
}
System.out.println(new Date());

控制台打印:

        Fri Dec 14 11:19:48 CST 2018Fri Dec 14 11:20:04 CST 2018

关于StringTokenizer 介绍
StringTokenizer是一个用来分隔String的应用类

1. 构造函数。

1. StringTokenizer(String str) :构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”。
2. StringTokenizer(String str, String delim) :构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符。
3. StringTokenizer(String str, String delim, boolean returnDelims) :构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。

2. 方法介绍

int       countTokens():返回nextToken方法被调用的次数。如果采用构造函数1和2,返回的就是分隔符数量
boolean   hasMoreElements():返回是否还有分隔符。
boolean   hasMoreTokens():同上
String  nextToken():返回从当前位置到下一个分隔符的字符串。
Object      nextElement():结果同上,除非返回的是Object而不是String
String       nextToken(String delim):同nextToken(),以指定的分隔符返回结果

例:(注意:StringTokenizer的分隔符不需要使用转义字符)


String str = "a/b;c]d}e*f,g";
StringTokenizer token = new StringTokenizer(str, "}]/;*,");// 默认不打印分隔符
// StringTokenizer token=new StringTokenizer(str,"}]/;*,",true);//打印分隔符
// StringTokenizer token=new StringTokenizer(str,"}]/;*,",false);//不打印分隔符
while(token.hasMoreTokens()){System.out.println(token.nextToken());
}

拓展:
String.split 常用于切割字符串,split传入的参数是正则表达式,它的内部是每次都comiple正则表达式,再调用Pattern.split方法
jdk源码:

public String[] split(String regex) {return split(regex, 0);
}public String[] split(String regex, int limit) {return Pattern.compile(regex).split(this, limit);
}

所以:如果调用String.split非常频繁的话,每次都重新编译正则表达式的代价很高,性能会受到很大影响,此时可以预编译Pattern,再调用Pattern.split方法


String str = "1,2,3,4,5,6,a,b,c";
String[] strArr = str.split(",");替代为
Pattern pattern = Pattern.compile(",");
String[] strArr = pattern.split(str,0);

java 分割字符串转换成一个数组相关推荐

  1. Java将一段逗号分割的字符串转换成一个数组

    String 类: String 类代表字符串.Java 程序中的所有字符串字面值都作为此类的实例实现.字符串是常量,它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因为 String 对象 ...

  2. Java将一段逗号分割的字符串转换成一个数组(亲测)

    String 类: String 类代表字符串.Java 程序中的所有字符串字面值都作为此类的实例实现.字符串是常量,它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因为 String 对象 ...

  3. 如何把一段逗号分割的字符串转换成一个数组?

    String.split() StringTokenizer类 package com.study.JavaBase;import org.junit.Test;import java.util.Ar ...

  4. Java面试题(八)-----如何将一段逗号分隔的字符串转换成一个字符串数组

    Java面试题(八)-----如何将一段逗号分隔的字符串转换成一个字符串数组 文章目录

  5. java怎么把字符串转换成字符数组

    此博客用于个人编程学习记录. 文章内容来自于: java怎么把字符串转换成字符数组-Java基础-PHP中文网https://www.php.cn/java/base/435415.html java ...

  6. java字符串转换成字节数组_将Java字符串转换为字节数组

    我有一个要加密的字节数组,然后转换为字符串,以便可以传输. 当我收到字符串时,我必须将字符串转换回字节数组,以便可以对其进行解密. 我检查了接收到的字符串是否与发送的字符串(包括长度)匹配,但是当我使 ...

  7. 怎么样把Java的字符串转化为字节数组?

    问题:怎么样把Java的字符串转化为字节数组 有没有任何方法把Java的字符串转化为字节数组 我尝试这样: System.out.println(response.split("\r\n\r ...

  8. java分割例子,Java 分割字符串详解及实例代码

    Java 分割字符串 java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int li ...

  9. double类型字符串转换成一个纯数字字符串和一个小数点位数的c++代码

    今天工作中遇到一个要不一个double型的字符串转换成一个纯字数字符串和一个标志这个数字字符串的小数点有几位的int类型 例如:"23.123"--->"23123 ...

最新文章

  1. 阿里、百度、腾讯都选择 Flink,它到底有什么魔力?
  2. 百分点首席经济学家张忠解读《美国白宫大数据白皮书》
  3. easyui tabs 使用iframe 出现两个垂直滚动条 解决方法
  4. NYOJ 16(矩形嵌套)
  5. java注解和python装饰器_Java 的注解 和 Python 的装饰器 是一回事吗?
  6. 源码编译安装httpd服务
  7. 关于eclipase出现的problems during content assist报错问题
  8. 华为OD机考分享精华帖
  9. ASCLL UTF-8 GBK URL编码
  10. 刷题记录:牛客NC23803DongDong认亲戚
  11. 第十四期百度技术沙龙:探讨大型互联网产品的运维实践
  12. 小米9se是Android6吗,小米9SE评测 优缺点十分明显
  13. 计算机主机对人体的辐射,电脑辐射的范围是多少
  14. pve远程连接 spcie_剑网3PVE远程输出宏 新版本花间宏分享
  15. VLC 推流的简单设置
  16. linux线程 ppt,Linux多线程编程多核编程.ppt
  17. HTML5期末大作业:旅游网站设计——简单大气的响应式旅游网页(5页) HTML+CSS+JavaScript...
  18. 一键 linux桌面安装vnc,Linux OpenVZ Debian 7 32/64bit环境一键安装VNC桌面环境教程
  19. 树莓派安装TensorFlow并使用[一步到位]
  20. 滤波器频率响应 matlab,求数字滤波器Hz的频率响应函数freqz.PPT

热门文章

  1. 全局悬浮框(只能在app开启式显示)
  2. 英特尔® 嵌入式显卡驱动程序
  3. android点击弹框,Android——js交互实现点击弹框
  4. 开源的python有限元软件_Python与有限元--基于Python编程的有限元分析及应用扩展...
  5. springAOP事物管理不生效原因总结————转载收藏于: superdog007
  6. ansys用什么cpu_ansys多cpu并行计算设置
  7. GBASE南大通用为2021世界制造业大会点赞
  8. matplotlib绘制柱状图(基础操作)
  9. 可穿戴设备的下半场,谁才会成为“擎天柱”?
  10. 渐冻症科学家将自己改造成半肉体半机械人,2.0升级版的自己!