2009-01-30 100 views
5

Tôi có một đoạn mã in văn bản từ tệp đến JTextArea được gọi là textArea.Xóa ký tự/dòng cuối cùng

Thật không may là phương pháp tôi đang sử dụng đi từng dòng (không lý tưởng) và vì vậy tôi phải nối thêm mỗi dòng với một \ n

Điều này là tốt cho bây giờ nhưng một dòng mới được tạo ra ở cuối.

Mã tôi có là như sau:

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

bất cứ ai có thể giúp tôi thoát khỏi dòng cuối cùng?

Trả lời

1

Làm thế nào về

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

Điều này dường như hoạt động hoàn hảo, tôi sẽ thử nghiệm nó một chút –

4

Một ý tưởng:

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

Ý tưởng là để nối thêm một ngắt dòng trước dòng mới để hiển thị, ngoại trừ dòng đầu tiên của tập tin.

1

Dường như bạn muốn có một dòng mới giữa hai dòng, chứ không phải sau mỗi dòng. Điều này có nghĩa là bạn phải có ít nhất hai dòng:

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

Tất nhiên, có vẻ phức tạp hơn. Đó là vì 'giữa' phức tạp hơn 'sau'.

1

Trong vòng lặp của bạn:

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

ví dụ: nếu đã có một số văn bản trong textarea của bạn, chèn một dòng mới.

2

Cách dễ nhất là không sử dụng BufferedReader.readLine(). Ví dụ:

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

tôi nên đã thấy điều này trước đây, nhưng một cách tốt hơn là để cho các JTextArea đọc tệp:

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

này sẽ vẫn đọc trong dòng mới ở cuối, nhưng nó sẽ bình thường hóa tất cả các kết thúc dòng trong văn bản của bạn (xem javadocs for DefaultEditorKit để có giải thích về cách xử lý kết thúc dòng). Vì vậy, bạn có thể thoát khỏi sự xuống dòng trailing với một cái gì đó như thế này:

// 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

thế nào về:

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

của nó khá dễ dàng .. Bạn chỉ cần tinh chỉnh mã của bạn một chút.

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

Tôi tin rằng mã này tạo ra chức năng mong muốn của bạn với chi phí tối thiểu.

Các vấn đề liên quan