java 分割字符串转换成一个数组

java 分割字符串转换成一个数组例如 Stringstr 1 2 3 4 5 6 a b c 方法一 String strArr str split 方法二 使用 StringTokeni 1 2 3 4 5 6 a b c StringTokeni newStringTok str String strArr newString token countTokens inti 0 while t

方法二:
使用 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(); } 

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

以下为测试代码:

1、使用split()

StringBuffer sb = new StringBuffer("a"); for (int i = 0; i < ; 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 2018 Fri Dec 14 11:20:49 CST 2018 

2、使用StringTokenizer

StringBuffer sb = new StringBuffer("a"); for (int i = 0; i < ; 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 2018 Fri 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方法被调用的次数。如果采用构造函数12,返回的就是分隔符数量 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); 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228407.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午7:05
下一篇 2026年3月16日 下午7:06


相关推荐

  • Linux命令 ps –ppid使用的一个坑

    Linux命令 ps –ppid使用的一个坑看一下下面这个命令 psppid 父进程名 opid 这个命令会打印出这个父进程下的所有子进程 非递归 但是 如果父进程下没有子进程 这个命令不打印任何东西并且返回错误码 1 例如 deftest pid printexecute ps ppid str pid o pid test 27842 结果

    2026年3月17日
    2
  • win11安装node并且配置环境变量

    win11安装node并且配置环境变量npm使用过程中的一些错误解决办法及npm常用命令和技巧-世有因果知因求果-博客园用户名是自己的C:\Users\KenKen\AppData\Roaming\npmNODE_PATHC:\ProgramFiles\nodejs\node_modules

    2022年5月31日
    158
  • 二级菜单导航栏(左侧)「建议收藏」

    二级菜单导航栏(左侧)「建议收藏」目标:实现左侧的二级导航栏效果图:项目演示:点击跳转到演示地址代码:<!DOCTYPEhtml><html> <head> <metacharset=”utf-8″> <title>左侧导航栏</title> </head> <style> body{ margin:0; padding:0; min-width:1200px; min-he

    2022年5月27日
    39
  • provided和compile的区别

    provided和compile的区别gradleprovid 和 compile 的区别在于 1 compile 假如你的 jar 包存在代码依赖性 在编译 运行时候需要依赖代码 那就用 compile2 provided 假如你的 jar 包存在代码依赖性 但是只在编译的时候需要用 而运行时不需要 例如运行时会去使用机器中 system framework 中的 jar 那就使用 provided

    2026年3月18日
    2
  • 文心一言深度评测:百度出品的AI对话助手,实力究竟如何?

    文心一言深度评测:百度出品的AI对话助手,实力究竟如何?

    2026年3月12日
    1
  • chmod 用法_举例说明chmod的两种用法

    chmod 用法_举例说明chmod的两种用法chmod[options]modefiles只能文件属主或特权用户才能使用该功能来改变文件存取模式。mode可以是数字形式或以whoopcodepermission形式表示。who是可选的,默认是a(所有用户)。只能选择一个opcode(操作码)。可指定多个mode,以逗号分开。options:-c,–changes只输出被改变文件的信息

    2022年10月20日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号