在做一个新闻的东西。对中文新闻标题的长度控制很郁闷!
如:“一二三四五六七八九十”,我现在要把过长的部分用“...”来省略。
我是这样做的:
String title = “一二三四五六七八九十”;
String dealtitle;
if(title.length()>10)
    dealtitle = title.subString(0,10)+"...";
else
    dealtitle = title;得出“一二三四五..."
<a href="news.jsp" title=<%=title%>><%=dealtitle%></a>
是能实现,可是当我在后台修改了数据库的title后,如加长了title:“一二三四五六七八九十十一士寺”后,并不能得到“一二三四五..."

解决方案 »

  1.   

    不应该吧?如果“title=一二三四五六七八九十十一士寺”的话,那你dealtitle等于多少?
      

  2.   

    subString截取的不是字节数而是个数~!
    应改为:
    dealtitle = title.subString(0,5)+"...";
      

  3.   

    结果应该是"一二三四五六七八九十..."吧。
    而且,两次结果都是这个,不会是"一二三四五..."吧。
    dealtitle = title.subString(0,10)+"...";
    截取了"一"到"十"。
    应该是这样吧。
      

  4.   

    to guitay(断弦) :
      混在一起的话也是截取5位,substring截取的是字符个数,而不是字节数~~!
      

  5.   

    楼主写的应该是正确的  dealtitle的结果不能是“一二三四五..."啊
      

  6.   

    substring是char数据,与编码无关,所以楼主的substring(0,10)应该截到十;
    写数据库编码和读数据库编码保持一致才能读取正确,只有读取正确才能截断正确,楼主不妨在截断前做些编码转化测试.
      

  7.   

    /** 
       * 将字符串截短,取前n个字符,英文算半个字符。 
       * @param orignalString 原字符串 
       * @param length 长度 
       * @param chopedString 超过部分的表示字符串 
       * @return 截取的字符串 
       */ 
      public static String chop(String orignalString,int length,String chopedString) { 
        if (orignalString==null||orignalString.length()==0) { 
          return orignalString; 
        } 
        orignalString=orignalString.replaceAll(" "," "); 
        if (orignalString.length()<length) { 
          return orignalString; 
        } 
        StringBuffer buffer=new StringBuffer(length); 
        length=length*2; 
        int count=0; 
        int stringLength=orignalString.length(); 
        int i=0; 
        for (;count<length&&i<stringLength;i++) { 
          char c=orignalString.charAt(i); 
          if (c<'\u00ff') { 
            count++; 
          } else { 
            count+=2; 
          } 
          buffer.append(c); 
        } 
        if (i<stringLength) { 
          buffer.append(chopedString); 
        } 
        return buffer.toString(); 
      }