删除最后一个字符/行。

5
我有一小段代码,可以将文件中的文本打印到名为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();
        }
    }
}

有人可以帮我去掉最后一行吗?

8个回答

6
如何呢:
text.substring(0,text.lastIndexOf('\n'));

4
(...)
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);
(...)

4
另一个想法:
boolean firstLine = true;
while ((displayText = br.readLine()) != null) {
    if (firstLine) {
        firstLine = false;
    } else {
        textArea.append("\n");
    }
    textArea.append(displayText);
}

这个想法是在新行之前添加换行符以显示文本,但第一行除外。


2

最简单的方法是不使用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);

这将读取文本末尾的换行符,但它将规范化文本中所有的换行符(请参见DefaultEditorKit的javadocs以了解如何处理行尾)。因此,你可以使用以下代码去除末尾的换行符:

// 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);
}

1

这很容易,你只需要稍微调整一下你的代码。

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

我相信这段代码可以以最小的成本实现您所需的功能。

1

怎么样?

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

1

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

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

当然,它看起来更复杂。这是因为“between”比“after”更复杂。


1

在你的循环中:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接