文档章节

一个字符串转换的问题

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

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

iOS时间格式化输出技巧

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

朱晓辉 ⋅ 2017/04/16 ⋅ 0

数据库中文乱码

楼主,这个问题一般是由于数据库需要的编码格式导致的,你先确认你的数据库是采用什么编码的,然后在入库之前进行相应的转换即可,这个问题我遇到多次,我相信我们遇到的是同一个问题。 我举...

BryanYang ⋅ 2014/12/29 ⋅ 0

一道关于PHP类型转换的面试题

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

烫烫烫烫烫烫 ⋅ 2015/04/22 ⋅ 0

类型安全枚举

传统枚举开发方法 一个类中有很多静态变量,然后 类名.变量名引用 问题出来了,因为静态变量是一个int,参数的范围不好确定,要写代码判断;如果int对应着一个字符串,还要转换,比较麻烦 新...

邓小峰 ⋅ 2009/03/26 ⋅ 0

MyBatis中处理字符串长度为1的字符串问题

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

ChinaHYF ⋅ 2017/03/22 ⋅ 0

Javascript数值转换(string,int,json)

数值: 在JavaScript中,数值转换一般有三种方式: 一、Number(param)函数:param可以用于任何数据类型 1.1 param是Boolean值,true和false分别转换为1和0; 1.2 param是数值,只是简单的传入...

easonjim ⋅ 2016/12/27 ⋅ 0

Python 编码为什么那么蛋疼?

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

刘志军 ⋅ 2017/03/22 ⋅ 0

JavaScript 网页链接调用Android程序

如何让网页链接实现启动Android的应用,网上有说重写WebView相关的shouldOverrideUrlLoading方法,但是这种理论上能实现,因为你的网页不是仅仅被你自己的webview来浏览,你需要做的是让市面...

wei-spring ⋅ 2015/05/26 ⋅ 0

字符串拼接引发的BUG

译者按: bug虽小,却是个磨人的小妖精! 原文: Fixing a bug: when concatenated strings turn into numbers in JavaScript 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本...

Fundebug ⋅ 2017/12/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

中标麒麟(龙芯版)7.0优盘安装

########################################## 制作U盘安装盘: 1.准备U盘: PMON环境下U盘必须格式化成ext3; 昆仑固件环境下可以格式化成ext3,ext4 2.把整个镜像 xxx.iso 复制到U盘下面 3....

gugudu ⋅ 22分钟前 ⋅ 0

老司机写的大数据建模五步走

本文将尝试来梳理一下数据建模的步骤,以及每一步需要做的工作。 01 第一步:选择模型或自定义模式 这是建模的第一步,我们需要基于业务问题,来决定可以选择哪些可用的模型。 比如,如果要预...

gulf ⋅ 31分钟前 ⋅ 0

PacificA 一致性协议解读

PacificA 的 paper 在 08 年左右发出来的,比 Raft 早了 6,7 年。 在 PacificA 论文中,他们强调该算法使用范围是 LAN (Local Area Network),讲白了就是对跨机房不友好。 不管是 ZAB,Raf...

黑客画家 ⋅ 34分钟前 ⋅ 0

盘符图标个性化

设置自己的专属盘符图标 准备ico格式的图片文件一个,在根目录下创建autorun.inf文件 文件内容 [Autorun]icon=logo.ico 重新启动或者插拔U盘即可看到结果...

阿豪boy ⋅ 34分钟前 ⋅ 0

Windows下QQ聊天记录中图片的默认存放位置

Windows下QQ聊天记录中图片的默认存放位置在设置中是没有说明的。 实测位置在:D:\Documents\Tencent Files\974101467\Image 其中: “974101467”为对应的QQ号; “C2C”为个人之间的聊天图...

临江仙卜算子 ⋅ 40分钟前 ⋅ 0

GC 的三种基本实现方式

参考资料《代码的未来》(作者: [日] 松本行弘)。 由于并非本人原著(我只是个“搬运工“),SO 未经本人允许请尽情转载。 另外个人像说明一下这里所说的GC指泛指垃圾回收机制,而单指Jav...

xixingzhe ⋅ 41分钟前 ⋅ 0

Android双击退出

/** * 菜单、返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode......

王先森oO ⋅ 45分钟前 ⋅ 0

idea 整合 vue 启动

刚学习Vue 搭建了一个项目 只能命令启动 Idea里面不会启动 尝试了一下修改启动的配置 如下: 1.首先你要保证你的package.json没有修改过 具体原因没有看 因为我改了这个name的值 就没办法启动...

事儿爹 ⋅ 51分钟前 ⋅ 0

redis在windows环境的后台运行方法

在后台运行,首先需要安装redis服务,命令为 redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动,命令为 redis-server --service-start 停止,命令为 redis-...

程序羊 ⋅ 54分钟前 ⋅ 0

比特币现金开发者提出新的交易订单规则

本周,四位比特币现金的四位开发者和研究员:Joannes Vermorel(Lokad),AmaurySéchet(比特币ABC),Shammah Chancellor(比特币ABC)和Tomas van der Wansem(Bitcrust)共同发表了一篇关...

lpy411 ⋅ 58分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部