2009-01-30 18 views
5

Tengo un fragmento de código que imprime texto desde un archivo a un JTextArea llamado textArea.Eliminar último carácter/línea

Desafortunadamente el método que estoy usando va línea por línea (no ideal) y así que tengo que añadir cada línea con un \ n

Esto está bien por ahora, pero una nueva línea se crea al final.

El código que tengo es el siguiente:

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

Puede alguien me ayude a deshacerse de la última línea?

Respuesta

1

¿Qué tal

if (textArea.length > 0) textArea.Text = textArea.Text.Substring(0 ,textArea.Text.Length - 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); 
(...) 
+0

Esto parece funcionar perfectamente, lo probaré un poco –

4

Otra idea:

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

La idea es añadir un salto de línea antes la nueva línea para visualizar, a excepción de la primera línea de la archivo.

1

parecer que quieren una nueva línea entre dos líneas, no después de cada línea. Esto significa que debe tener al menos dos líneas:

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

Por supuesto, parece más complejo. Eso es porque 'entre' es más complejo que 'después'.

1

En su bucle:

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

es decir, si ya hay algún texto en el área de texto, insertar una nueva línea.

2

La manera más fácil es no usar BufferedReader.readLine(). Por ejemplo:

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

EDITAR

Debería haber visto esto antes, pero de una manera mucho mejor es dejar que el JTextArea leer el archivo:

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

Esto todavía leerá la nueva línea al final, pero normalizará todas las terminaciones de línea en su texto (vea el javadocs for DefaultEditorKit para obtener una explicación de cómo se manejan las terminaciones de línea). Así que usted puede deshacerse del salto de línea final con algo como esto:

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

¿qué tal:

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

Es bastante fácil .. Sólo tiene que modificar su código un poco.

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

Creo que este código produce su función deseada a un costo mínimo.

Cuestiones relacionadas