文档章节

一个字符串转换的问题

天蓝1122
 天蓝1122
发布于 2015/10/15 11:46
字数 533
阅读 40
收藏 4

昨天遇到一个问题,需要将大量的时间格式字符串如”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); }

最高效的方法,从字符数组着手,比方法四快几倍,当然是针对这种情况了

总结:
其实我们编程的时候,都会有惯性思维,遇到问题往往会用习惯思路去解决,在一般情况下是没问题的,只有在特殊情况下,想得到更高效的解决办法,还是要从问题的根源去思考。

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
天蓝1122
粉丝 4
博文 57
码字总数 34492
作品 1
佛山
技术主管
「译」JavaScript 的怪癖 1:隐式类型转换

零:提要 [此贴子是 javascript 的 12 个怪癖(quirks) 系列的第一篇。] JavaScript 是非常宽容的,「来者不拒」,不在乎什么类型。 例如,它如果想要接受数字,它并不拒绝其他类型的值,而...

justjavac
2013/04/18
211
0
iOS时间格式化输出技巧

时间格式化输出 一.前言 最近项目开发过程中用到了大量的关于时间的处理,将后台返回的时间字符串转换为指定的格式时间再显示在UI上. 例如: 将后台返回的时间字符串转换为:、、、、、、、等等...

朱晓辉
2017/04/16
0
0
一道关于PHP类型转换的面试题

原文发表于我的博客 http://starlight36.com/post/php-type-convert 最近在为公司面试新人,经常会问到的一道题目就是PHP类型转换的值,例如: var_dump((int)true);var_dump((string)true)...

烫烫烫烫烫烫
2015/04/22
0
0
MyBatis中处理字符串长度为1的字符串问题

今天在工作中遇到一个问题:在MyBatis的Mapper中增加了一个长度为1的字符串的判断,但是程序执行的时候报了类型转换错误异常,很纳闷,最后用了两个小时才找到问题所在,具体情况是这样的: ...

ChinaHYF
2017/03/22
521
0
Python 编码为什么那么蛋疼?

据说,每个做 Python 开发的都被字符编码的问题搞晕过,最常见的错误就是 UnicodeEncodeError、UnicodeDecodeError,你好像知道怎么解决,遗憾的是,错误又出现在其它地方,问题总是重蹈覆辙...

刘志军
2017/03/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

最全最强解析:支付宝钱包系统架构内部剖析(架构图)

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可...

晨猫
27分钟前
4
0
竞品分析

那什么样的场景需要用关键纬度分析法分析竞品呢? 竞品分析的目的是为了看竞品们和自己产品重合的业务都具备哪些功能点,以及这些功能是怎么做的,以此确定自己产品的优化方向。 竞品们的业务...

于谦老师
34分钟前
1
0
OSChina 周三乱弹 —— 公司女同事约我

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享水木年华的单曲《蝴蝶花(2002年大提琴版)》 《蝴蝶花(2002年大提琴版)》- 水木年华 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
929
16
Linux环境搭建 | VMware下共享文件夹的实现

在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了。本文介绍了两种共享文...

良许Linux
今天
9
0
JUC锁框架——AQS源码分析

JUC锁介绍 Java的并发框架JUC(java.util.concurrent)中锁是最重要的一个工具。因为锁,才能实现正确的并发访问。而AbstractQueuedSynchronizer(AQS)是一个用来构建锁和同步器的框架,使用A...

长头发-dawn
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部