一个字符串转换的问题
一个字符串转换的问题
天蓝1122 发表于2年前
一个字符串转换的问题
  • 发表于 2年前
  • 阅读 37
  • 收藏 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); }

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

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

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

标签: java 字符串 转换
共有 人打赏支持
粉丝 4
博文 57
码字总数 34492
作品 1
×
天蓝1122
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: