Удалить последний символ / строку - PullRequest
5 голосов
/ 30 января 2009

У меня есть фрагмент кода, который печатает текст из файла в JTextArea с именем textArea.

К сожалению, метод, который я использую, идет построчно (не идеально), и поэтому я должен добавить каждую строку с \ 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 голосов
/ 31 января 2009

как насчет:

text.substring(0,text.lastIndexOf('\n'));
4 голосов
/ 30 января 2009

Другая идея:

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

Идея состоит в том, чтобы добавить разрыв строки до новой строки для отображения, за исключением первой строки файла.

4 голосов
/ 30 января 2009
(...)
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 голосов
/ 31 января 2009

Самый простой способ - не использовать 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));
}

EDIT

Я должен был увидеть это раньше, но гораздо лучший способ - позволить JTextArea прочитать файл:

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

Это все равно будет читаться в новой строке в конце, но это нормализует все окончания строк в вашем тексте (см. javadocs для 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);
}
1 голос
/ 19 января 2015

Это довольно просто ... Вам просто нужно немного подправить код.

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

Я считаю, что этот код производит желаемую функцию с минимальными затратами.

1 голос
/ 30 января 2009

В вашем цикле:

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

т.е. если в текстовой области уже есть какой-либо текст, вставьте новую строку.

1 голос
/ 30 января 2009

Очевидно, вы хотите новую строку между двумя строками, а не после каждой строки. Это означает, что у вас должно быть как минимум две строки:

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

Конечно, это выглядит сложнее. Это потому, что «между» является более сложным, чем «после».

1 голос
/ 30 января 2009

Как насчет

if (textArea.length > 0) textArea.Text = textArea.Text.Substring(0 ,textArea.Text.Length - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...