编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

解决方案 »

  1.   

    我想String to char[]可以做到
      

  2.   

    给你一个我前几天刚写好的代码,好用的..
    package littlebean;
    import java.util.*;
    public class DoTxt {
         public DoTxt() {  }
         
         /** 获取指定字符串的长度 */
     public static int getTxtLen(String txt) {
         txt=txt.trim();
         String bb=null;
         int txtlen=0;
     for (int i = 0; i < txt.length(); i++) { 
         bb = txt.substring(i, i+1); 
         //生成一个Pattern,同时编译一个正则表达式  
         if(java.util.regex.Pattern.matches("[\u4E00-\u9FA5]", bb)){
         txtlen=txtlen+2; 
         }
         else{
         txtlen++;
         } 
     }    
     return txtlen; 
     } 
        
     /** 截取指定长度的字符串 */
     public static String CutTxt(String txt,int aimlen){
     int origlen=0;
     int reallen=0;
     String aimtxt=null;
     String bb=null;
     txt=txt.trim();
     origlen=txt.length();
     if (origlen>=1){
     for(int i=0;i<origlen;i++){
         bb = txt.substring(i,i+1);
         if(java.util.regex.Pattern.matches("[\u4E00-\u9FA5]", bb)){
          reallen=reallen+2; 
             }
             else{
             reallen=reallen+1;
             }
         if(reallen>=aimlen){
                                      /** 取得是实际的字符,所以不会存在半个字的情况 */
          aimtxt = txt.substring(0,i+1);
          break;
         }
     }
    }
    else{
     aimtxt="";
    }
     return aimtxt;
    }
    }实际用法:
    String txt="我是china人,我爱我的国家";
    int len=DoTxt.getTxtLen(str);
    txt=DoTxt.CutTxt(txt,15);
      

  3.   

    修改一下楼上的
    public static String CutTxt(String txt, int aimlen) {
    int origlen = 0;
    int reallen = aimlen / 2;
    String aimtxt = null;
    String bb = null;
    txt = txt.trim();
    origlen = txt.length();
    if (aimlen == 0 || origlen == 0)
    aimtxt = "";
    else if (aimlen >= getTxtLen(txt))
    aimtxt = txt;
    else {
    for (int i = aimlen / 2; i <= aimlen; i++) {
    //从所截长度的一半判断到所截长度即可
    bb = txt.substring(0, i);
    reallen = getTxtLen(bb);
    if (reallen == aimlen) {
    aimtxt = txt.substring(0, i);
    break;

    else if (reallen > aimlen) {
    aimtxt = txt.substring(0, i - 1);
    break;
    }
    }
    }
    return aimtxt;
    }