【问题标题】:Remove last character/line删除最后一个字符/行
【发布时间】:2009-01-30 14:32:47
【问题描述】:

我有一段代码可以将文本从文件打印到名为 textArea 的 JTextArea。

不幸的是,我使用的方法是逐行进行的(不理想),所以我必须在每一行附加一个 \n

现在这很好,但最后会创建一个新行。

我的代码如下:

class menuOpen implements ActionListener {
    public void actionPerformed(ActionEvent e)
        {
        try {
            File filePath = new File("c:\\test.txt");
            FileInputStream file = new FileInputStream(filePath);
            BufferedReader br = new BufferedReader(new InputStreamReader(file));
            String displayText;

            while ((displayText = br.readLine()) != null) {
                textArea.append(displayText + "\n");
            }

        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}

谁能帮我去掉最后一行?

【问题讨论】:

    标签: java swing


    【解决方案1】:

    怎么样:

    text.substring(0,text.lastIndexOf('\n'));
    

    【讨论】:

      【解决方案2】:
      (...)
      FileReader r= new FileReader(filePath);
      StringBuilder b=new StringBuilder();
      int n=0;
      char array[]=new char[1024];
      while((n=r.read(array))!=-1) b.append(array,0,n);
      r.close();
      String content=b.toString();
      textArea.setText(content.substring(0,content.lengt()-1);
      (...)
      

      【讨论】:

        【解决方案3】:

        另一个想法:

        boolean firstLine = true;
        while ((displayText = br.readLine()) != null) {
            if (firstLine) {
                firstLine = false;
            } else {
                textArea.append("\n");
            }
            textArea.append(displayText);
        }
        

        想法是在要显示的新行之前附加一个换行符,文件的第一行除外。

        【讨论】:

          【解决方案4】:

          最简单的方法是不使用BufferedReader.readLine()。例如:

          BufferedReader in = new BufferedReader(new FileReader(filePath));
          char[] buf = new char[4096];
          for (int count = in.read(buf); count != -1; count = in.read(buf)) {
              textArea.append(new String(buf, 0, count));
          }
          

          编辑

          我应该以前见过这个,但更好的方法是让 JTextArea 读取文件:

          BufferedReader in = new BufferedReader(new FileReader(filePath));
          textArea.read(in, null);
          

          这仍然会在末尾读入换行符,但它将规范化文本中的所有行尾(有关如何处理行尾的解释,请参阅javadocs for DefaultEditorKit)。所以你可以用这样的方式去掉尾随的换行符:

          // line endings are normalized, will always be "\n" regardless of platform
          if (textArea.getText().endsWith("\n")) {
              Document doc = ta.getDocument();
              doc.remove(doc.getLength() - 1, 1);
          }
          

          【讨论】:

            【解决方案5】:

            怎么样

            if (textArea.length > 0) textArea.Text = textArea.Text.Substring(0 ,textArea.Text.Length - 1)
            

            【讨论】:

              【解决方案6】:

              显然你想要一个换行符两行之间,而不是在每一行之后。这意味着您应该至少有两行:

              if (d = br.readLine()) != null ) {
                  textArea.append(displayText);
                  while (d = br.readLine()) != null ) {
                      textArea.append( "\n" + displayText);
                  }
              }
              

              当然,它看起来更复杂。那是因为 'between' 比 'after' 更复杂。

              【讨论】:

                【解决方案7】:

                在你的循环中:

                while ((displayText = br.readLine()) != null) {
                    if (textArea.length() > 0)
                        textArea.append("\n");
                    textArea.append(displayText);
                }
                

                即如果您的文本区域中已经有一些文本,请插入一个换行符。

                【讨论】:

                  【解决方案8】:

                  这很简单。你只需要稍微调整一下你的代码。

                  String displayText = br.readLine(); 
                  textArea.append(displayText);
                  while ((displayText = br.readLine()) != null) {
                      textArea.append("\n" + displayText);
                  }
                  

                  我相信这段代码能以最低的成本产生你想要的功能。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-12-15
                    • 1970-01-01
                    • 2011-03-24
                    相关资源
                    最近更新 更多