Discussion:
[問題] 請問如何有效率的將字串首字改大寫?
(时间太久无法回复)
a***@ptt.cc
2007-06-21 07:24:52 UTC
Permalink
請問有沒有啥最有效率的方式
將字串的第一個字母改成大寫阿?

我原本是這樣寫

String s = "javaworld";
Character c = new Character(s.charAt(0));
c = Character.toUpperCase(c);
s = s.replaceAll("^[a-z]", c.toString());

後來覺得實在很畫蛇添足
乾脆改成這樣

String s = "javaworld";
s = s.substring(0, 1).toUpperCase() + s.substring(1);


不過看來還是挺蠢的...XD
我想知道有沒有更有效率又漂亮的寫法?
最好是用到正規式的...(剛好最近在學) :P

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.131.226
Alien
2007-06-21 07:46:39 UTC
Permalink
※ 引述《archerlin ()》之銘言:
: 請問有沒有啥最有效率的方式
: 將字串的第一個字母改成大寫阿?
: 我原本是這樣寫
: String s = "javaworld";
: Character c = new Character(s.charAt(0));
: c = Character.toUpperCase(c);
: s = s.replaceAll("^[a-z]", c.toString());
: 後來覺得實在很畫蛇添足
: 乾脆改成這樣
: String s = "javaworld";
: s = s.substring(0, 1).toUpperCase() + s.substring(1);
: 不過看來還是挺蠢的...XD
: 我想知道有沒有更有效率又漂亮的寫法?
: 最好是用到正規式的...(剛好最近在學) :P

String s = "javaworld";
s=new StringBuffer(s).setCharAt(0, Character.toUpperCase(s.charAt(0))
.toString();


好像效率好一點 (?) , 至少生出來的object 好像少一點 XDDD

Alien

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.22.246.26
勁過呂布
2007-06-21 07:49:23 UTC
Permalink
※ 引述《archerlin ()》之銘言:
: 請問有沒有啥最有效率的方式
: 將字串的第一個字母改成大寫阿?
: 我原本是這樣寫
: String s = "javaworld";
: Character c = new Character(s.charAt(0));
: c = Character.toUpperCase(c);
: s = s.replaceAll("^[a-z]", c.toString());
: 後來覺得實在很畫蛇添足
: 乾脆改成這樣
: String s = "javaworld";
: s = s.substring(0, 1).toUpperCase() + s.substring(1);
: 不過看來還是挺蠢的...XD
: 我想知道有沒有更有效率又漂亮的寫法?
: 最好是用到正規式的...(剛好最近在學) :P

char[] charAry = s.toCharArray();
charAry[0] = Character.toUpperCase(charAry[0]);
s = String.valueOf(charAry);

效率有好一丁點... (重覆十萬次,你的用 62ms,這個用 30ms......)

但沒有漂亮過 XD

--
《為了要得到真相,就要向原 PO 伸圖》

那就是伸圖魔人的沒圖沒真相原則,那時我們堅信那就是逼逼死的真實

 靠么,圖咧?


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 147.8.130.225
勁過呂布
2007-06-21 07:54:43 UTC
Permalink
※ 引述《adrianshum (Alien)》之銘言:
: String s = "javaworld";
: s=new StringBuffer(s).setCharAt(0, Character.toUpperCase(s.charAt(0))
: .toString();
: 好像效率好一點 (?) , 至少生出來的object 好像少一點 XDDD
: Alien

這樣好像不能 compile (?)
少了一個 ")",
setCharAt() return void cannot be used as a reference

好像還是要分幾行來寫...

--
《為了要得到真相,就要向原 PO 伸圖》

那就是伸圖魔人的沒圖沒真相原則,那時我們堅信那就是逼逼死的真實

 靠么,圖咧?


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 147.8.130.225
Alien
2007-06-21 08:18:00 UTC
Permalink
※ 引述《superlubu (勁過呂布)》之銘言:
: ※ 引述《adrianshum (Alien)》之銘言:
: : String s = "javaworld";
: : s=new StringBuffer(s).setCharAt(0, Character.toUpperCase(s.charAt(0))
: : .toString();
: : 好像效率好一點 (?) , 至少生出來的object 好像少一點 XDDD
: : Alien
: 這樣好像不能 compile (?)
: 少了一個 ")",
: setCharAt() return void cannot be used as a reference
: 好像還是要分幾行來寫...

只是順手打出來而已 :P
嗯, 看來真的不能一行搞定...

稍稍試了一下, 就算改用了 StringBuilder, 也是用 char array 比較快一點

Alien

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.22.246.26
a***@ptt.cc
2007-06-21 08:30:15 UTC
Permalink
※ 引述《adrianshum (Alien)》之銘言:
: ※ 引述《superlubu (勁過呂布)》之銘言:
: : 這樣好像不能 compile (?)
: : 少了一個 ")",
: : setCharAt() return void cannot be used as a reference
: : 好像還是要分幾行來寫...
: 只是順手打出來而已 :P
: 嗯, 看來真的不能一行搞定...
: 稍稍試了一下, 就算改用了 StringBuilder, 也是用 char array 比較快一點
: Alien
恩 感恩 採用CharArray 程式繼續往下寫囉...

會問這基本的正是因為我JSP網頁大約有50~60萬左右個字串要即時這樣改
想問問看速度快點的寫法
能省一點時間算一點,user才不會等太久 (我那支撈SQL就要超久了,能省則省XD)
我也順手簡測了一下 各跑50萬次

我的方法1最爛 大約要1s
我的方法2 大約要280ms
StringBuilder 大約要200ms左右 (應該是省space)
CharArray 大約要70ms左右

果然小地方運算還是用愈primitive type愈快阿...用太多加工的方法只是愈慢 XD


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.131.226
勁過呂布
2007-06-21 08:49:28 UTC
Permalink
※ 引述《archerlin ()》之銘言:
: 恩 感恩 採用CharArray 程式繼續往下寫囉...
: 會問這基本的正是因為我JSP網頁大約有50~60萬左右個字串要即時這樣改
: 想問問看速度快點的寫法
: 能省一點時間算一點,user才不會等太久 (我那支撈SQL就要超久了,能省則省XD)
: 我也順手簡測了一下 各跑50萬次
: 我的方法1最爛 大約要1s
: 我的方法2 大約要280ms
: StringBuilder 大約要200ms左右 (應該是省space)
: CharArray 大約要70ms左右
: 果然小地方運算還是用愈primitive type愈快阿...用太多加工的方法只是愈慢 XD

要是你真的有這樣的用法... 可以試用這個:

tmp = "atestingstring";

char[] charAry2 = new char[20];
for (int i=0; i<600000; i++) {
int size = tmp.length();
tmp.getChars(0, size, charAry2, 0);
charAry2[0] = Character.toUpperCase(charAry2[0]);
tmp2 = String.valueOf(charAry2, 0, size);
}

charAry2 是一個夠大,用作 buffer 的東西,所有這個換大小寫的工作都用它...
於是系統不需要每一次都先找一個空間來做 toCharArray() ....

是會有快一丁丁丁丁點啦....

(重覆 60 萬次計算: Version 1 是 78~94ms, Version 2 是 63~78ms)

不過好像會令到 coding 變得有點亂 XD 完全是為了效能犧牲了維護 :P

而且 charAry2 的長度設定有點微妙,必需夠大而不能過大 XDrz

--
很多人以為 所以我要 其實我是個快
我是大學生 告訴大家 三十歲的怪叔叔
● ●/ ︿ ︿
/勁\ <勁 ●
ㄨ /\ ㄨ


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 147.8.130.225
愚人
2007-06-21 09:05:09 UTC
Permalink
※ 引述《archerlin ()》之銘言:
: ※ 引述《adrianshum (Alien)》之銘言:
: : 只是順手打出來而已 :P
: : 嗯, 看來真的不能一行搞定...
: : 稍稍試了一下, 就算改用了 StringBuilder, 也是用 char array 比較快一點
: : Alien
: 恩 感恩 採用CharArray 程式繼續往下寫囉...
: 會問這基本的正是因為我JSP網頁大約有50~60萬左右個字串要即時這樣改
: 想問問看速度快點的寫法
: 能省一點時間算一點,user才不會等太久 (我那支撈SQL就要超久了,能省則省XD)
: 我也順手簡測了一下 各跑50萬次
: 我的方法1最爛 大約要1s
: 我的方法2 大約要280ms
: StringBuilder 大約要200ms左右 (應該是省space)
: CharArray 大約要70ms左右
: 果然小地方運算還是用愈primitive type愈快阿...用太多加工的方法只是愈慢 XD


<style>
body {text-transform:capitalize}
</style>

這樣就全都轉好了

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.174.141

继续阅读narkive:
Loading...