java - readLine 用于读取多行而不循环?

标签 java jakarta-ee

所以我的 servlet 正在从另一个 servlet 读取 URL 链接,然后发布与其关联的文章。所有文章都位于一个 .txt 文件中,每篇文章都有自己单独的行。所以我已经使第一个 URL 链接正常工作,但我无法使第二个 URL 链接正常工作。问题是如果我使用像 while( br.readline() != null) 这样的循环然后它将显示所有 3 篇文章,而不仅仅是我点击的 URL 的文章。当我不循环它而只使用 br.readline() 时它停在第一行,不会像我请求 URL 2 或 URL 3 时那样移动到第二行。这是我的代码:

s = br.readLine();
    out.println("<tr>");
    StringTokenizer s2 = new StringTokenizer(s, "|");
    if (request.getParameter("article1") != null){
        while (s2.hasMoreElements()){
            if (index == 0){
                out.println("<td class='first'>"+s2.nextElement()+"</td>");
            }
            else if (index == 1){
                out.println("<td>"+s2.nextElement()+"</td>");
            }
            else if (index == 2){
                out.println("<td>"+s2.nextElement()+"</td>");
            }
            else if (index == 3){
                out.println("<td>"+s2.nextElement()+"</td>");
            }
            index++;
            out.println("</tr>");
        }
    }
    else if (request.getParameter("article2") != null){
    s = br.readLine();
        while (s2.hasMoreElements()){
            if (index == 4{
                out.println("<td class='first'>"+s2.nextElement()+"</td>");
            }
            else if (index == 5){
                out.println("<td>"+s2.nextElement()+"</td>");
            }
            else if (index == 6){
                out.println("<td>"+s2.nextElement()+"</td>");
            }
            else if (index == 7){
                out.println("<td>"+s2.nextElement()+"</td>");
            }
            index ++;
            out.println("</tr>");
        }

我知道这可能只是一个愚蠢的编码错误,我看不到它,因为我已经研究它很长时间了,但我似乎无法让它做我想要的事情。另外我没有展示第 3 条的代码,因为它本质上是相同的,如果我可以修复第 2 条的代码,那么第 3 条的代码基本上是相同的。

最佳答案

我强烈建议您将代码的“读取数据”部分与“输出 HTML”部分分开。

看起来您应该为一篇文章创建一个数据结构,其中包含每行中不同位的属性。然后您可以:

  • 创建 List<Article>
  • 一次读取一行
    • 将该行解析为 Article (例如,通过根据您的代码进行拆分)
    • 添加每个 Article到列表

您现在拥有 List<Article>您可以在需要输出 HTML 的代码部分中以任何您喜欢的方式使用它。您无需担心将行读取和解析与输出代码混合在一起。这应该会让一切变得更容易处理。

关于java - readLine 用于读取多行而不循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25612903/

相关文章:

java - 获取类的方法

java - php 值 Java 字节数组

Java bean 验证带范围的大写字母

java - 对象实例化涉及的步骤。

java - 我是否可以在独立 ejb 模块中引用任何外部第 3 方 jar?

java - servlet http post 和 put 方法之间的区别?

java - GWT 代码未编译

java - 使用 cron 表达式的定时器任务 EJB3/JBoss 6

jakarta-ee - 是否有任何框架可以使用 java 在 webapplications 中开发聊天应用程序

asp.net - 在 Eclipse 中拖放 Web 项目