一个字符串转换的问题
2015-10-15 00:00
417 查看
昨天遇到一个问题,需要将大量的时间格式字符串如”2015,10,14,18,03,01”,转化为指定格式的字符串如”2015-10-14 18:03:01” ,由于转换数据量大且频繁,所以特意研究了一下哪种方法比较高效。
方法一
很多人写程序的人自然会想到的一种方法,其实这个在大数据量转化时,是最慢的。
方法二
用正则表达式,会给人一种高大上的感觉,效率当然给方法一高不少,不过只是初级用法。
方法三
同样是正则表达式,这个写法会比前面的更高效
方法四
意外发现,这种情况下,这个方法会比方法三还快不少
方法五
最高效的方法,从字符数组着手,比方法四快几倍,当然是针对这种情况了
总结:
其实我们编程的时候,都会有惯性思维,遇到问题往往会用习惯思路去解决,在一般情况下是没问题的,只有在特殊情况下,想得到更高效的解决办法,还是要从问题的根源去思考。
版权声明:本文为博主原创文章,未经博主允许不得转载。
方法一
SimpleDateFormat timeShareSdf = new SimpleDateFormat("yyyy,MM,dd,HH,mm,ss"); SimpleDateFormat formatDateTimeSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for(String i : data){ String t = formatDateTimeSdf.format(timeShareSdf.parse(i)); }
很多人写程序的人自然会想到的一种方法,其实这个在大数据量转化时,是最慢的。
方法二
String regex= "(\\d{4}),(\\d{2}),(\\d{2}),(\\d{2}),(\\d{2}),(\\d{2})"; for(String i : data){ String t = i.replaceFirst(regex, "$1-$2-$3 $4:$5:$6"); }
用正则表达式,会给人一种高大上的感觉,效率当然给方法一高不少,不过只是初级用法。
方法三
String regex= "(\\d{4}),(\\d{2}),(\\d{2}),(\\d{2}),(\\d{2}),(\\d{2})"; Pattern p = Pattern.compile(regex); for(String i : data){ Matcher matcher = p.matcher(i); StringBuffer sb = new StringBuffer(); if(matcher.find()){ String t = sb.append(matcher.group(1)) .append("-").append(matcher.group(3)) .append(" ").append(matcher.group(4)) .append(":").append(matcher.group(6)) .toString(); } }
同样是正则表达式,这个写法会比前面的更高效
方法四
for(String i : data){ String[] item = i.split(","); StringBuffer sb = new StringBuffer(); String t = sb.append(item[0]).append("-") .append(item[2]).append(" ") .append(item[3]).append(":") .append(item[4]).append(":") .append(item[5]).toString(); }
意外发现,这种情况下,这个方法会比方法三还快不少
方法五
public String replaceStr(String orignStr, char[] targetArray, char[] replaceArray){ int count = 0; if(orignStr == null){ return null; } char[] cs = orignStr.toCharArray(); for(int i = 0; i < cs.length; i++){ if(cs[i] == targetArray[count]){ cs[i] = replaceArray[count]; if(count == targetArray.length - 1){ break; }else{ count++; } } } return new String(cs); }
char[] r1 = {',',',',',',',',','}; char[] r2 = {'-','-',' ',':',':'}; for(String i : data){ String t= replaceStr(i, r1, r2); }
最高效的方法,从字符数组着手,比方法四快几倍,当然是针对这种情况了
总结:
其实我们编程的时候,都会有惯性思维,遇到问题往往会用习惯思路去解决,在一般情况下是没问题的,只有在特殊情况下,想得到更高效的解决办法,还是要从问题的根源去思考。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- 数据库链接字符串查询网站