<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    blog.Toby

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks

    由于接到一任務(wù),大致是這樣子的:一個彈頁面里面要顯示一段文字(多國字符),彈出頁面的寬度是定死的。客戶不希望文字長度過長時,下面出現(xiàn)水平的拉條。這就關(guān)系到一個自動換行的問題。

    由于中文,日文,韓文等一般占2個字節(jié),英文一般占1個字節(jié),所以要換行,首先要計算長度。只有在字節(jié)長度相同的情況下?lián)Q行,同時又要注意不能將中文字拆開了,否則就會是亂碼了。

    經(jīng)過一番努力,這個問題終于搞定了。具體函數(shù)如下

    /*判斷是否雙字節(jié)字符*/?

    public boolean isDoublebyteWord(String str){
    ??byte[] b;
    ??int temp;
    ??for (int i = 0; i < str.length(); i++) {
    ??b = str.substring(i, i + 1).getBytes();
    ??temp = b[0];
    ??if (temp > 0) {
    ??return false;
    ??}
    ??}
    ??return true;
    ?}

    /*給字符串添加換行符,其中l(wèi)inepos是需要換行的位置,按字節(jié)算的*/?

    public String lineStr(String s,int linePos){
    ??String new_str="";
    ??int total_len=0;
    ??int brNum=0;
    ??for(int i=1;i<=s.length();i++){
    ???if(isDoublebyteWord(s.substring(i-1,i))){
    ????total_len+=2;
    ????if(total_len>=(linePos*(brNum+1))){
    ?????new_str+=s.substring(i-1,i)+"<br/>";
    ?????brNum++;
    ????}else{
    ?????new_str+=s.substring(i-1,i);
    ????}????
    ???}else{
    ????total_len+=1;
    ????if(total_len>=(linePos*(brNum+1))){
    ?????new_str+=s.substring(i-1,i)+"<br/>";
    ?????brNum++;?????
    ????}else{
    ?????new_str+=s.substring(i-1,i);
    ????}
    ???}
    ???
    ??}
    ??return new_str;
    ?}




    ?

    在上一篇文章《將中英文混合的字符串換行》中提到了一個換行的算法,后來在實(shí)際應(yīng)用中發(fā)現(xiàn),還是有些問題的,比如,一行全是英文,或者全是中文,排出來的長度是不一樣的。所以。后來不得不借用表格以及css來控制,其實(shí)也很簡單,就加一句話 style="word-break:break-all"。這樣自動換行沒問題。

    但是,我們還要實(shí)現(xiàn)的另外一個功能是:截取字符串的一部分,作為圖片的簡介,比如說:在一個iframe中顯示最新的消息,配有圖片,但是給出的位置不可能全部顯示所有數(shù)據(jù),因此要截取一部分。而且字符串中有 <br/>這樣的換行符,因?yàn)椴荒芎唵蔚慕厝 T儆芯褪秋@示的行數(shù)不能超過三行。

    經(jīng)過一番努力,將于寫了個截取函數(shù),還能將就這樣。函數(shù)如下

    ?public String getShortString(String source,int cutPos){
    ??String shortStr = "";
    ??int brNum=0;
    ??String tmp="";
    ??String tmp2 = "";
    ??String tmpShort="";
    ??int pos = 0;
    ??int total_len = 0;

    ? try{
    ??pos = source.indexOf("<br/>");
    ??System.out.println("1 pos = "+pos);
    ??if(pos>0){
    ???if(source.length()<=cutPos){
    ???
    ????tmpShort = source;
    ???}else{
    ????//判斷在截取位置是否有<br/>出現(xiàn),所以往前往后各取4位,判斷是否有<br/>出現(xiàn)
    ????//為什么取四,那是因?yàn)?lt;br/>長度是5,而要<br/>中一個字符出現(xiàn)在cutPos位置,
    ????//取四最可能是cutPos位置是> 或者 < ;所以取四包括了所有可能出現(xiàn)情況
    ????//1:當(dāng)原字符串長度大于截取位置+<br/>的長度
    ????if ( (source.length()-cutPos) >=4){
    ?????if(cutPos>=4){
    ??????tmp = source.substring(cutPos-4,cutPos+4);
    ?????}else{
    ??????tmp= source.substring(0,cutPos+4);
    ?????}
    ????}else{
    ?????if(cutPos>=4){
    ??????tmp = source.substring(cutPos-4,source.length());
    ?????}else{
    ??????tmp= source.substring(0,source.length());
    ?????}
    ????}
    ????System.out.println("1 tmp = "+tmp);
    ????int ipos = tmp.indexOf("<br/>");
    ????if (ipos>0){
    ??????tmpShort = source.substring(0,cutPos-4)+tmp.substring(0,ipos)+"<br/>";?????
    ????}else{
    ?????tmpShort = source.substring(0,cutPos);
    ????}

    ???}
    ???System.out.println("1 tmpShort = "+tmpShort);
    ????tmp = tmpShort;
    ????tmp2 = tmpShort;
    ????while(pos>0){
    ?????brNum+=1;
    ?????tmp = tmp2.substring(0,pos);
    ????
    ?????if(brNum>2){
    ??????
    ??????tmp = tmp2.substring(0,pos);
    ??????System.out.println("tmp="+tmp);
    ??????//shortStr+=tmp;
    ??????pos = 0;
    ??????//tmp2 = tmp;
    ?????}else{
    ??????shortStr+=tmp+"<br/>";
    ??????tmp = tmp2.substring(pos+5);
    ??????System.out.println("tmp 2 ="+tmp);
    ??????pos = tmp.indexOf("<br/>");
    ??????System.out.println("pos="+pos);
    ??????tmp2 = tmp;??
    ?????}
    ??????
    ????}
    ????if (brNum==1){?
    ?????System.out.println("1");
    ?????if(tmp.length()>cutPos/2){
    ??????shortStr+=tmp.substring(0,cutPos/2)+" ...";//當(dāng)有一個<br/>時 后面再也沒有的時候,第二行截取設(shè)定長度的一半。
    ?????}else{
    ??????shortStr+=tmp+" ...";
    ?????}
    ????}else if(brNum==2){
    ?????System.out.println("2");
    ?????if(tmp.length()>cutPos/3){
    ??????shortStr+=tmp.substring(0,cutPos/3)+" ...";//當(dāng)有二個<br/>時 后面再也沒有的時候,第三行截取設(shè)定長度的1/3。
    ?????}else{
    ??????shortStr+=tmp+" ...";
    ?????}
    ????}else if(brNum==3){
    ?????System.out.println("3");
    ?????if(tmp.length()>cutPos/4){
    ??????shortStr+=tmp.substring(0,cutPos/4)+" ...";//當(dāng)有三個<br/>時 后面再也沒有的時候,第三行截取設(shè)定長度的1/4
    ?????}else{
    ??????shortStr+=tmp+" ...";
    ?????}?????
    ?????//shortStr+=tmp+"<br/>"+" ...";
    ????}
    ??
    ???}else{
    ????if(source.length()<=cutPos){
    ???
    ?????tmpShort = source;
    ????}else{
    ?????tmpShort = source.substring(0,cutPos)+" ...";
    ????}
    /*????if(source.length()>cutPos){
    ?????if(tmpShort.length()>cutPos){
    ??????shortStr = tmpShort.substring(0,cutPos)+" ...";
    ?????
    ?????}else{
    ??????shortStr = tmpShort+" ...";
    ?????}
    ????}else{
    ?????shortStr = tmpShort;
    ????}*/
    ????shortStr = tmpShort;
    ?????
    ??}
    ??}catch(Exception e){
    ???if(source.length()<=cutPos){
    ???
    ????tmpShort = source;
    ???}else{
    ????tmpShort = source.substring(0,cutPos)+" ...";
    ???}
    ???e.printStackTrace();
    ???shortStr= tmpShort;
    ??}
    ??
    ??return shortStr;
    ??
    ?}



    作者Blog:http://blog.csdn.net/kasam/

    posted on 2006-03-25 11:03 渠上月 閱讀(955) 評論(0)  編輯  收藏 所屬分類: java tips
    主站蜘蛛池模板: 亚洲一区二区三区免费| 日本免费中文字幕在线看| 四虎影视久久久免费 | 日本激情猛烈在线看免费观看 | 国产福利在线观看永久免费| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 亚洲区小说区图片区QVOD| 最近中文字幕无免费视频| 久久九九AV免费精品| yellow视频免费在线观看| 亚洲国产精品成人AV在线| 亚洲第一区视频在线观看| 亚洲精品乱码久久久久久按摩 | 日韩国产欧美亚洲v片| 久久精品国产亚洲av麻豆图片| 亚洲中文字幕久久精品无码喷水| 国产免费变态视频网址网站| 免费无码又爽又刺激聊天APP| 88av免费观看| 久9热免费精品视频在线观看| 成人av片无码免费天天看| 黄页视频在线观看免费| 亚洲日韩AV一区二区三区中文| 亚洲欧洲日产v特级毛片| 国产成年无码久久久免费| 美女免费精品高清毛片在线视| 亚洲AV无码片一区二区三区| 日本亚洲精品色婷婷在线影院| 亚洲剧情在线观看| 97久久精品亚洲中文字幕无码| 亚洲欧洲日韩不卡| 亚洲av永久无码精品表情包| 国产AV无码专区亚洲A∨毛片| 亚洲热妇无码AV在线播放| 久久久亚洲欧洲日产国码农村| 亚洲人成人网站色www| 国产精品亚洲成在人线| 和老外3p爽粗大免费视频| 色视频在线观看免费| 特a级免费高清黄色片| 男女一进一出抽搐免费视频|