首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于生成静态分页有关问题,望来讨论,并指点一二

2012-01-05 
关于生成静态分页问题,望高手进来讨论,并指点一二本人刚毕业踏入社会工作:近来主管要求做一个静态分页功能

关于生成静态分页问题,望高手进来讨论,并指点一二
本人刚毕业踏入社会工作:
近来主管要求做一个静态分页功能
主要是对Web编辑器(FCKedit)编辑的内容进行分页
首先,静态化的要求是按照1KB来分页.
通过分析,知道FCKedit提交到后台处理的数据,其实就是一段字符串
它有个规律就是内容被编辑后会自动嵌入 <p> </p> 这两个标签,找到这个规律后,其实分页就是对字符串中的字符个数来分.
字符串如下: <p> 标题:飞人刘翔再破世界纪录 </p> <p> <table> <tr> 内容省略 <tr> </table> </p>
1KB是如何计算得来?
字符串中: <   或   p   或   标,这些都是一个字符,占计算机的16位,16位   =   2B,那么1KB   =   1024B,1024/2   =   512,也就是说每截取512个字符就可以生成1KB左右的文件,但截取的时候如何呢?
本人是按照如下方法截取:
按照 <p> ... </p> 块来取
按照这种方法取会出现如下情况:
1. <p> .. </p> 之间只取到一半
2.第一个 <p> .. </p> 内容达不到1KB,还要加多一个 <p> .. </p> ,还不够的话继续添加
3.在 <p> 或 </p> 标签中间截开,这种情况有七种,分别例如如下:
3.1   <   与/p> <p>
3.2   </   与p> <p>
3.3   </p   与> <p>
3.4   </p>   与 <p>
3.5 </p> <   与p>
3.6 </p> <p   与>
3.7 </p> <p>
除了这七种情况之外,还有一种就是从非标签中间隔开:
比如: <p> ss   隔开s <p> 或 <p> ss </p> <p> ss   隔开ss </p>

费了很大劲:
编写如下程序实现,贴出来让高手们提提建议,并指点指点晚辈:
package   com.hx.util;

import   java.util.List;
import   java.util.ArrayList;
import   java.util.Iterator;


public   class   Pagination   {
        private   static   final   int   BYTE_CONSTANT   =   13;
        public   Pagination()   {
        }

        public   List   getContents(String   content,   int   KB)   {
                List   contents   =   new   ArrayList();
                //存放截取后的字符串
                String   leaveContent   =   null;
                //临时存放字符串
                String   tmpContent   =   null;
                //计算内容的长度
                int   kb   =   KB   *   BYTE_CONSTANT;
                while   (content.length()   >   0)   {
                        //判断字符串是否被截空
                        if   (content.length()   >   kb)   {
                                //按照所给的大小,截取字符串
                                tmpContent   =   content.substring(0,   kb);
                                //将剩下的字符串临时存放在临时变量中
                                leaveContent   =   content.substring(kb);
                        }   else   {
                                if   (!content.equals( " "))   {


                                        contents.add(content);
                                        break;
                                }   else   {
                                        //将content置空
                                        content   =   " ";
                                        break;
                                }
                        }
                        //截取剩余字符串,凑整字符串
                        // <与/p> <p>
                        boolean   flag1   =   tmpContent.endsWith( " < ")   &&
                                                        leaveContent.startsWith( "/p> ");
                        // </与p> <p>
                        boolean   flag2   =   tmpContent.endsWith( " </ ")   &&
                                                        leaveContent.startsWith( "p> ");
                        // </p与> <p>
                        boolean   flag3   =   tmpContent.endsWith( " </p ")   &&
                                                        leaveContent.startsWith( "> ");
                        // </p> 与 <p>
                        boolean   flag4   =   tmpContent.endsWith( " </p> ")   &&
                                                        leaveContent.startsWith( " <p> ");
                        // </p> <与p>
                        boolean   flag5   =   tmpContent.endsWith( " </p> < ")   &&


                                                        leaveContent.startsWith( "p> ");
                        // </p> <p与>
                        boolean   flag6   =   tmpContent.endsWith( " </p> <P ")   &&
                                                        leaveContent.startsWith( "> ");
                        // </p> <p>
                        boolean   flag7   =   tmpContent.endsWith( " </p> <p> ");
                        if   (flag1   ||   flag2   ||   flag3||flag5||flag6||flag7)   {
                                if   (flag1)   {
                                        //截断不完整符号,加上完整的 </p>
                                        tmpContent   =   tmpContent.substring(0,
                                                        tmpContent.lastIndexOf( " < "))   +   " </p> ";
                                        //添加到集合
                                        contents.add(tmpContent);
                                        //重置content
                                        content   =   leaveContent.substring(leaveContent.indexOf( " <p> "));
                                }
                                if   (flag2)   {
                                        tmpContent   =   tmpContent.substring(0,
                                                        tmpContent.lastIndexOf( " </ "))   +   " </p> ";
                                        //添加到集合


                                        contents.add(tmpContent);
                                        //重置content
                                        content   =   leaveContent.substring(leaveContent.indexOf( " <p> "));

                                }
                                if   (flag3)   {
                                        tmpContent   =   tmpContent.substring(0,
                                                        tmpContent.lastIndexOf( " </p "))   +   " </p> ";
                                        //添加到集合
                                        contents.add(tmpContent);
                                        //重置content
                                        content   =   leaveContent.substring(leaveContent.indexOf( " <p> "));

                                }
                                if   (flag5)   {
                                        System.out.println( "######## ");
                                        tmpContent   =   tmpContent.substring(0,   tmpContent.lastIndexOf( " < "));
                                        contents.add(tmpContent);
                                        content   =   " < "   +   leaveContent;
                                }
                                if   (flag6)   {
                                        tmpContent   =   tmpContent.substring(0,   tmpContent.lastIndexOf( " <p "));
                                        contents.add(tmpContent);


                                        content   =   " <p "   +   leaveContent;
                                }
                                if   (flag7)   {
                                        tmpContent   =   tmpContent.substring(0,   tmpContent.lastIndexOf( " <p> "));
                                        contents.add(tmpContent);
                                        content   =   " <p> "   +   leaveContent;
                                }
                        }   else   if   (flag4)   {
                                //恰好在 <p> </p> 中间隔开
                                //将完整字符串添加到集合
                                contents.add(tmpContent);
                                //重置content
                                content   =   leaveContent;
                        }   else   {
                                //没有在 </p> <p> 中截开
                                tmpContent   =   tmpContent   +
                                                          leaveContent.substring(0,
                                                leaveContent.indexOf( " </p> ")   +
                                                4);
                                //重置content
                                content   =   leaveContent.substring(leaveContent.indexOf( " </p> ")   +
                                                                                                  4);


                                //添加到集合
                                contents.add(tmpContent);

                        }

                }
                return   contents;
        }


        public   static   void   main(String[]   args)   {
                Pagination   pagination   =   new   Pagination();
                String   content   =
                                " <p> aaaff </p> <p> ssdafdsa我胶的爱fsd </p> <p> iiiiiooooodfpsdfasdfppppp </p> ";
                List   contents   =   pagination.getContents(content,   1);
                Iterator   iter   =   contents.iterator();
                while   (iter.hasNext())   {
                        String   item   =   (String)   iter.next();
                        System.out.println( "item   =   "   +   item);
                }
        }
}




[解决办法]
做的太复杂了
不用补齐,这种分页最好是不严格的。
太严格了很难做

新浪的新闻都没做好

热点排行