我写的 没有写完 要用到递归来操作这个字符串,说一下这个题目的要求吧!接受一个字符串,然后按照每行13个字分行,2个字母算一个字,一个全角的符号算一个字,汉字算一个字体(这些判断字的我都写出来了)
就是不会递归来截取这个字符串 谁改一下帖上来学习一下,谢谢了!
package com.hitech.cpp.util;import java.util.ArrayList;
import java.util.List;/**
 * WEB打印组件所需的分行打印控制方法
 * @author montao
 */
public class DisjoinRowPrint {

private int ROW_CONTENT_COUNT = 13;

/**
 * 返回一个分行好之后的LIST集合,集合里面存放内容的不同行
 * @param wordContent
 * @return
 */
@SuppressWarnings("unchecked")
public List<String> getRowContentToPrint(String wordContent)
{
//创建一个LIST对象用于存储分行好之后的集合内容
List<String> rowList = new ArrayList();
//判断取值
if(wordContent!=null && wordContent!="")
{
System.out.println("进入判断,查看到String的Length的值是: "+wordContent.length());
//换行统计符
float count = 0;
//将Srting转变为StringBuffer
StringBuffer sb = new StringBuffer(wordContent);
System.out.println("进入判断,查看到StringBuffer的Length的值是: "+sb.length());
if(sb.length()>0)
{
//循环遍历传递过来的字符串
for(int i=0;i<sb.length();i++)
{
String s1 = String.valueOf(sb.charAt(i));
//汉字或则全角符号
if(s1.getBytes().length==2)
{
count++;
}
//字母和半角符号
if(s1.getBytes().length==1)
{
count = count + 0.5f;
}
//如果一行满足规定的字数就换行
if(Math.round(count)==ROW_CONTENT_COUNT)
{
String newLineContent = sb.substring(0,ROW_CONTENT_COUNT);  //截取字符串
sb.replace(0, ROW_CONTENT_COUNT, ""); //将这段字符串删除
//将该截取出来的字符串存放到List里
rowList.add(newLineContent);
System.out.println("第"+i+"行的字符串是: " + newLineContent);
}
}
}
System.out.println(sb.toString());
}
return null;
}

public static void main(String arg[])
{
DisjoinRowPrint d = new DisjoinRowPrint();
d.getRowContentToPrint("我不知道是不是真的哦?。你说的什么阿 可以才知道什么是加的?我想回去阿我要回家暗暗阿,,,,我受不了了 我轩昂回家了阿 骂个比的死垃圾爱公司阿!");
}
}

解决方案 »

  1.   


    void fun(List lt , String str){
      if(str.length() <13){ //字的长度判断,这样感觉有问题
        lt.add(str);
      }else{
        String tmp = subString..  // 截取13个字
        lt.add(tmp);
        fun(lt,sub()); //sub()为剩下的字符串
      }
    }
      

  2.   

    我不知道是不是真的哦?。你 
    说的什么阿 可以才知道什么 
    是加的?我想回去阿我要回家 
    暗暗阿,,,,我受不了了 
    我轩昂回家了阿 骂个比的死 
    垃圾爱公司阿! 
    下面的程序运行的效果如上面的字符:import java.util.ArrayList;
    import java.util.List;/**
     * WEB打印组件所需的分行打印控制方法
     * @author montao
     */
    public class DisjoinRowPrint {    private int ROW_CONTENT_COUNT = 13;    /**
         * 返回一个分行好之后的LIST集合,集合里面存放内容的不同行
         * @param wordContent
         * @return
         */
        @SuppressWarnings("unchecked")
        public List<String> getRowContentToPrint(String wordContent) {
            //创建一个LIST对象用于存储分行好之后的集合内容
            List<String> rowList = new ArrayList();
            //判断取值
            if (wordContent != null && !wordContent.equals("")) {
                System.out.println("进入判断,查看到String的Length的值是: " + wordContent.length());
                //换行统计符
                float count = 0;
                //将Srting转变为StringBuffer
                StringBuffer sb = new StringBuffer(wordContent);
                System.out.println("进入判断,查看到StringBuffer的Length的值是: " + sb.length());
                if (sb.length() > 0) {
                    //循环遍历传递过来的字符串
                    for (int i = 0; i < sb.length(); i++) {
                        String s1 = String.valueOf(sb.charAt(i));
                        //汉字或则全角符号
                        if (s1.getBytes().length == 2) {
                            count++;
                        }
                        //字母和半角符号
                        if (s1.getBytes().length == 1) {
                            count = count + 0.5f;
                        }
                        //如果一行满足规定的字数就换行
                        if (Math.ceil(count)>ROW_CONTENT_COUNT-1) {
                            String newLineContent = sb.substring(0, ROW_CONTENT_COUNT);  //截取字符串
                           
                            sb=sb.delete(0,ROW_CONTENT_COUNT);
                            System.out.println(newLineContent);
                           // sb.replace(0, ROW_CONTENT_COUNT, ""); //将这段字符串删除
                            //将该截取出来的字符串存放到List里
                           // rowList.add(newLineContent);
                           // System.out.println("第" + i + "行的字符串是: " + newLineContent);
                        }
                   }
                }
               System.out.println(sb.toString());
            }
            return null;
        }    public static void main(String arg[]) {
            DisjoinRowPrint d = new DisjoinRowPrint();
            d.getRowContentToPrint("我不知道是不是真的哦?。你说的什么阿 可以才知道什么是加的?我想回去阿我要回家暗暗阿,,,,我受不了了 我轩昂回家了阿 骂个比的死垃圾爱公司阿!");
        }
    }