删除最后一个字符/行

时间:2009-01-30 14:32:48

标签: java swing

我有一段代码,可以将文件从文件打印到名为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 个答案:

答案 0 :(得分:6)

怎么样:

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

答案 1 :(得分: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);
(...)

答案 2 :(得分:4)

另一个想法:

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

我们的想法是在显示新行之前附加换行符 ,除了文件的第一行。

答案 3 :(得分: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);

这仍然会在最后的换行符中读取,但它会标准化文本中的所有行结尾(请参阅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);
}

答案 4 :(得分:1)

怎么样

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

答案 5 :(得分:1)

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

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

当然,它看起来更复杂。那是因为'之间' 比'之后'更复杂。

答案 6 :(得分:1)

在你的循环中:

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

即。如果您的textarea中已有一些文字,请插入换行符。

答案 7 :(得分:1)

非常简单..你只需稍微调整你的代码。

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

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