用substring()控制接循环
for(int i = 0 ; i < s.length()/5+1 ; i++)
{
  if((i+1)*5 <s.length)
  {
  System.out.println(s.substring(i*5,(i+1)*5));
  }
  else
  {
  Systme.out.println(s.substring(i*5,s.length()));
  }
}

解决方案 »

  1.   

    不错不错,其实最好把楼上的方法写在一个类中作为Static保存,修改一下加上个参数控制是5个中文字长度换行或10个中文字长度换行。
      

  2.   

    在字段串里每5个字符后加上"\r\n",在println时会自动换行的,
      

  3.   

    但是这样存在这样的问题:     比如有一行全是中文 “这是第一行”,但是这一行的行距可以打印十个字符,比如
    “aaaaaaaaaa”,因为这个时候他们的byte数是一样的,所以我想做的是在确定一行byte数的情况下自动换行打印,类如: 
       设定byte数 为 10,
       字符串 “这是第aa一行的距离是aaaaaaaaaa” 就应该打印为
      
        这是第aa一
        行的距离是
        aaaaaaaaaa
    很郁闷,现在还没有想出方法
      

  4.   

    把字符串转化为byte[],然后按你要求的长度×2,依次截取,不过这个过程中你需要判断你当前截取的到底是一个汉字(比如abc阿斗嘎,你截取的长度是两个汉字,这次你就不能从byte[]的3截取,这样你就把阿分成了两部分,这时你要么前进一,或是后退一)。
    判断当前的byte是否为汉字的一部分,我用的是byty>255.不知道这样是否正确,反正我在这样应用的时候是没有问题的
      

  5.   

    public class Newline
    {
        public static void main(String[] args) throws Exception
        {   
            String str = new String("这是第aa一行的距离是aaaaaaaaaa");
            int len = str.length();
            
            int sum = 0;
            int temp = 0;
            
            for (int i = 0; i < len; i++)
            {           
                if ((int) str.charAt(i) >= 128)
                {
                    sum += 2;   
                }
                else
                {
                    sum += 1;   
                }
                            
                if (sum % 10 == 0)
                {
                    System.out.println(str.substring(temp, i + 1));
                    temp = i + 1;
                }
            }
        }
    }以上方法可以根据实际情况优化,但是有个问题如果你的byte数是奇数时,分离的结果会有乱码。
      

  6.   

    麻烦一点的话你可以先得到文字所占用的宽度(像素),知道了宽度就可以按自己的需要断行了。JLabel label = new JLabel("我们都有一个家,名字叫中国abcdefg");
    Font font = new Font("宋体", 0, 12);
    label.setFont(font);
    FontMetrics fm = label.getFontMetrics(label.getFont());
    System.out.println(fm.stringWidth(label.getText()));-------------------------------
    结果: 198
      

  7.   

    另外,请楼主在根据实际需要设计时,注意如下三种情况(换行byte数均为10):
    public class Newline
    {
        public static void main(String[] args) throws Exception
        {   
            String str = new String("这是第12一行的距离是1234567890");
            //String str = new String("这是第123一行的距离是1234567890");
            //String str = new String("这是第1234一行的距离是1234567890");
            int len = str.length();
            
            int sum = 0;
            int temp = 0;
            
            for (int i = 0; i < len; i++)
            {           
                if ((int) str.charAt(i) >= 128)
                {
                    sum += 2;   
                }
                else
                {
                    sum += 1;   
                }
                            
                if (sum % 10 == 0)
                {
                    System.out.println(str.substring(temp, i + 1));
                    temp = i + 1;
                }
            }
            
            if (sum % 10 != 0)
            {
                System.out.println(str.substring(temp, len));
            }
        }
    }
      

  8.   

    修改 if (sum % 20 == 0 || sum % 20 == 1)  应该就没问题了,呵呵,再次感谢!