文字列変換の問題
昨日問題がありました。「2015,10,14,18,03,01」のような大量の時間書式文字列を、指定された形式の文字列に変換します。方法1, 方法二 方法3, 方法4, 方法5,
総括:実は私達がプログラミングする時、慣性の思惟があって、問題に出会うのはよく習慣の考えで解決して、普通の情況の下で問題がないので、特殊な情況の下でだけあって、もっと高い効率の解決方法を得たくて、やはり問題の根源から思考に行きます。
著作権声明:本文はブロガーのオリジナル文章で、ブロガーの許可なしに転載してはいけません。
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();
}
この場合、この方法は方法3よりもずっと早いことが意外に分かりました。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); }
最も効率的な方法は、文字配列から着手して、方法の4倍より何倍も速くなります。もちろんこの場合に対してです。総括:実は私達がプログラミングする時、慣性の思惟があって、問題に出会うのはよく習慣の考えで解決して、普通の情況の下で問題がないので、特殊な情況の下でだけあって、もっと高い効率の解決方法を得たくて、やはり問題の根源から思考に行きます。
著作権声明:本文はブロガーのオリジナル文章で、ブロガーの許可なしに転載してはいけません。