锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品一区二区三区久久,久久精品视频一,国产日韩一区二区三免费高清 http://www.aygfsteel.com/eckelcn/archive/2005/11/18/20467.htmleckelcneckelcnFri, 18 Nov 2005 09:25:00 GMThttp://www.aygfsteel.com/eckelcn/archive/2005/11/18/20467.htmlhttp://www.aygfsteel.com/eckelcn/comments/20467.htmlhttp://www.aygfsteel.com/eckelcn/archive/2005/11/18/20467.html#Feedback0http://www.aygfsteel.com/eckelcn/comments/commentRss/20467.htmlhttp://www.aygfsteel.com/eckelcn/services/trackbacks/20467.html娣卞叆StringBuffer
浣滆?eckel_cn
    鏈榪?闂叉殗涔嬩綑,閲嶆柊鏁寸悊鑷敤鐨凷tringUtil綾?鍦ㄦ暣鐞嗗埌repeat鏂規硶(閲嶅瀛楃涓?鏃?鍙戠幇鍏跺瓨鍦ㄦ晥鐜囬棶棰?渚挎墦綆楅噸鏂板啓涓涓?鍗村彂鐜頒簡涓緋誨垪浠ュ墠娌″お娉ㄦ剰鐨勪笢瑗?瑙夊緱寰堟湁蹇呰鍐欎笅鏉?
鍘熸潵榪欎釜repeat鏂規硶,寰堢畝鍗?涓昏浠g爜澶ц嚧濡備笅:
1public static String repeat1(String str, int n) {
2StringBuffer strBuf = new StrBuffer(str.length()*n);
3for(int i - 0; i < n; i++{
4    strBuf.append(str);
5}

6retrn strBuf.toString();
7}
    鍒濅竴鐪?灝辮兘鍙戠幇涓鐐歸棶棰?褰搉寰堝ぇ,杈懼埌涓瀹氬ぇ灝?灝辮兘浣垮爢鏍堟孩鍑?鍑虹幇OutOfMemery閿欒.
閭e浣曢伩鍏嶈繖涓棶棰樺憿,鎴戦┈涓婃兂鍒頒簡,鏃㈢劧StringBuffer鍜孲tring涓鏍峰唴閮ㄩ兘鏄湪鎿嶄綔char鏁扮粍,
閭f垜灝辮嚜宸辯洿鎺ユ搷浣渃har鏁扮粍,鍦ㄦ渶灝戠殑寰幆閲岄潰,濉厖char鏁扮粍,浠g爜濡備笅:
 1public static String repeat2(String str, int n) {
 2    int len = str.length();
 3    int maxlen = len * n;
 4    char[] chars = new char[len * n];
 5    str.getChars(0, len, chars, 0);
 6    int count = len;
 7    int copyLen = 0;
 8    while ((copyLen = maxlen - count > count ? count : maxlen - count) > 0{
 9            System.arraycopy(chars, 0, chars, count, copyLen);
10            count += copyLen;
11    }

12    String outstr = new String(chars);
13    return outstr;
14}
    嫻嬭瘯鍚?鍙戠幇,寰幆鎺у埗鍦ㄤ簡鏈灝?浣嗘槸,鎬ц兘鍗磋繕涓嶅repeat1,涔熻浣犱細鍜屾垜涓鏍峰紑濮嬪緢鎯婅,浣嗙湅浜?BR>StringBuffer鐨勫疄鐜板悗,鍙戠幇repeat2鐨勫疄鐜頒腑,灝哻har鏁扮粍,杞崲涓篠tring,鏄晥鐜囧涔堜綆鐨勪簨鎯?榪欎釜榪囩▼闇瑕佸湪String鍐呴儴閲嶆柊鍒涘緩涓涓猚har鏁扮粍,鐒跺悗鎶婁紶榪涘幓鐨刢har鏁扮粍,澶嶅埗緇欏畠.鑰宺epeat1涓負浠涔堟病鏈夎繖涓ц兘闂鍛?鍏跺疄榪欏氨鏄褰掑姛浜嶴UN鍦ㄥ疄鐜癝tringBuffer涓殑涓涓噸瑕佸睘鎬?shared,褰撲綘浣跨敤StringBuffer鍚?鎯沖緱鍒癝tring鏃?String浼氬叡浜玈tringBuffer涓殑char鏁扮粍,榪欐牱涓鏉?鎬ц兘闈炲父楂?
     鍏變韓浼氫笉浼氬甫鏉ュ壇浣滅敤鍛?SUN鐨勫疄鐜板綋鐒惰冭檻鍒頒簡,鍦ㄦ敼鍙楽tringBuffer鏃?濡傛灉榪欎釜StringBuffer
鏈夊叾浠朣tring鍏變韓瀹冪殑char鏁扮粍鏃?StringBuffer灝辨妸榪欎釜char鏁扮粍璁╃粰String,鑷繁閲嶆柊澶嶅埗涓浠戒嬌鐢?
鏃㈢劧闂鍙戠幇浜?鎴戝張鎹簡縐嶇畻娉曟潵瀹炵幇,鍚屾牱涔熸槸鎶婂驚鐜帶鍒跺湪鏈灝?鍚屾椂瑙e喅杞崲甯︽潵鐨勬晥鐜囦綆涓嬮棶棰?
 1public static String repeat3(String str, int n) {
 2 // if input string is null,return null.
 3 if (null == str) {
 4  return null;
 5 }

 6 final int strlen = str.length();
 7 // if repeat number is less than two or given string's length is zero,
 8 // then return the givien string.
 9 if (2 > n || 0 == strlen) {
10  return str;
11 }

12 // assigns the enough size for the string buffer.
13 StringBuffer strBuf = new StringBuffer(strlen * n);
14 // get odd length flag.
15 final boolean oddLen = n % 2 == 1 ? true : false;
16 // calculates the grow times.
17 final int growTimes = (int) Math.floor(Math.log(n) / Math.log(2));
18 // adds one given string.
19 strBuf.append(str);
20 // grows until more than half of the repeat count.
21 for (int i = 0; i < growTimes; i++{
22  strBuf.append(strBuf);
23  if (Math.pow(2, i - 1* 2 < n && Math.pow(2, i) * 2 >= n) {
24   break;
25  }

26 }

27 // reset the string buffer's length to half of the repeat count.
28 strBuf.setLength(strlen * Math.round(n / 2));
29 // grows to the repeat count.
30 strBuf.append(strBuf);
31 if (oddLen) {
32  strBuf.append(str);
33 }

34 String returnStr = new String(strBuf);
35 return returnStr;
36}

37

     綆楁硶瀹炵幇,鍐嶆嫻嬭瘯,嫻嬭瘯鍙戠幇,鍦ㄨ妯′笉鏄壒鍒ぇ鐨勬儏鍐典笅,repeat3鐨勬晥鐜囪鏄庢樉浼樹簬鍓嶄袱涓?浣嗗湪瑙勬ā澶х殑鎯呭喌涓?浼氬彉鐨勫樊涓嶅,鎬庝箞浼氳繖鏍風殑鍛?鍐嶆榪涜娣卞叆璋冩煡,緇撴灉鍙戠幇鏄疭UN鐨凷ystem.arrayCopy榪欎釜鏂規硶鏈夋ц兘闂,鐗瑰埆鏄綋瑕佸鍒剁殑闀垮害鐗瑰埆澶х殑鎯呭喌涓?鎬ц兘涓嬮檷鐨勬瘮杈冨揩,鍐嶆崲涓狪BM鐨凧DK瀹炵幇,鍙堝彂鐜?IBM鐨勮繖涓柟娉曠殑瀹炵幇瑕佹瘮SUN鏈夋敼榪?
    鐪熸槸涓嬈℃瘮杈冩湁鎰忔濈殑娣卞叆StringBuffer,鍦ㄥ疄闄呰繍鐢ㄤ腑repeat3瀹屽叏鍙互浠f浛涓婇潰涓ょ鏂規硶.


eckelcn 2005-11-18 17:25 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 濮阳县| 澄江县| 抚宁县| 呼伦贝尔市| 衢州市| 乐东| 楚雄市| 青田县| 比如县| 镇宁| 商都县| 安远县| 上高县| 黎川县| 西峡县| 泗水县| 奉贤区| 怀柔区| 弥渡县| 南充市| 禹州市| 包头市| 麻栗坡县| 巩义市| 永年县| 江门市| 娄烦县| 湘乡市| 彩票| 衢州市| 佛教| 天长市| 长顺县| 土默特左旗| 汉阴县| 克拉玛依市| 醴陵市| 内江市| 白朗县| 华坪县| 澄城县|