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

例如: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 2018
                Fri 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 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);
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值