String ="阿斯顿a发就adfasdf1阿迪发生01123撒地方飞洒发";排版
一行只能排10个字节,最后一个是汉字如果排不下则另起一行排列。  我所知道的是根据String按每个字符分成String[],然后数字每个字符String.getBytes("GBK").leng相加(汉字2个字节,数字,字母一个字节),那后能相加到10就另起一行,如过到11则把此字符另起一行排版。问题数据量很大,排起来相率不高,而且也麻烦。
  有什么简洁的方法??效果图:
0123456789012345678901234567890     --格式序列
阿斯f顿发
就adfdasdf
阿迪f发生0
123撒地方
飞f洒发

解决方案 »

  1.   

    在哪里显示?
    如果在页面上,可以考虑下排版插件:FCKEditor...
    如果在文本上,好像还没有简洁的方法,只能通过程序来控制了
      

  2.   

      数据库取数据  
    生成txt文本
      

  3.   


    String s ="阿斯顿a发就adfasdf1阿迪f发生0123撒地方飞f洒发";
    int len=s.length();
    int count=0;
    int pre=0;
    for(int i=0;i<len;i++){
    char c=s.charAt(i);
    int cw=1;
    if(c>=0x80){
    cw=2;
    }
    if(count+cw>10){
    System.out.println(s.substring(pre,i));
    pre=i;
    i--;
    count=0;
    continue;
    }
    count+=cw;
    }
    if(pre<len){
    System.out.println(s.substring(pre));
    }
      

  4.   

    c>=0x80 大于就表示汉字吗??
      
      查了下网上的 一个汉字 getBytes("GBK")=2个字节,这2个字节都是负数的吗,是负数的都是汉字吗?
      

  5.   

    1)java中 ,char是无符号的,取值范围 0-0xFFFF, 汉字不是负的;
    2)c>=0x80 不一定是汉字,但在GBK编码中得占2字节
      

  6.   

         public static String getSubString3(String str,int limitLen,List<String> list)  throws UnsupportedEncodingException
         {  
             byte[] bytes = str.getBytes("GBK");  
             int num=0;  
             for(int i=0;i<bytes.length;){  
                 if(bytes[i]<0){  
                     num+=2;  
                   i+=2;
                 }else{  
                     num++;
                     i++;
                 }
                 if(num >= limitLen)  
                     break;  
             }  
               
             if(num > limitLen){  
                 num-=2;  
             }  
             
              String sub = new String(bytes,0,num,"GBK");
              list.add(sub);
              
              if(str.length()>sub.length())
              getSubString3(str.substring(sub.length()), limitLen,list);
               
             return new String(bytes,0,num,"GBK");  
         } 
      这里的确是判断是否是小于0.小于的话就是汉字,我也试了下,结果也正确。
      

  7.   

    if(bytes[i]<0){
    你这里比较的是byte,不是char,  byte是有符号的, 汉字的GBK编码高位为1,  也就是负数了例外,这个方法下面这两个地方会导致效率比较低
    1)str.getBytes("GBK"); 
    2)String sub = new String(bytes,0,num,"GBK");
      

  8.   

                if(c>=0x80){
                    cw=2;
                }
     或者
    if(bytes[i]<0){  
    num+=2;  
    i+=2;
    }else{  
    num++;
    i++;
    }
      这2个方法判断都正确吗,对于汉字、英文、数字、符号