2010-07-25 34 views
11

tôi chỉ thử nghiệm thoát xóa lùi như sau:Java xóa lùi thoát

System.out.println("Hello\b"); 

tôi mong đợi để có được kết quả: Hell
Nhưng đó là: "Xin chào" với một khối vuông

ai biết cách java xử lý này?

Trả lời

18

Java không 'xử lý' nhân vật đó chút nào. Tất cả những gì nó biết là một luồng byte mà hệ điều hành nói nó có thể ghi các byte, và nó sẽ vui vẻ viết các byte vào nó, bao gồm cả một backspace ASCII.

Điều gì xảy ra khi luồng nhận được ký tự đó không liên quan gì đến Java, nó hoàn toàn phụ thuộc vào thiết bị đầu cuối. Một số thiết bị đầu cuối sẽ xóa nhân vật trước đó, một số sẽ hiển thị ký tự backspace nó như một số glyph lạ, hoặc thậm chí là một đặc biệt "backspace ký tự" glyph. Một số có thể thả nhân vật hoàn toàn nếu họ không thể giải thích nó, những người khác (hầu hết các trình giả lập thiết bị đầu cuối, trên thực tế) sẽ hoạt động khác nhau tùy thuộc vào cách chúng được cấu hình. Nhưng tất cả điều này không liên quan gì đến Java, chúng sẽ hành xử theo cách đó cho dù chúng được viết bởi Java hay Perl print hoặc C++ cout hoặc bất kỳ thứ gì khác.

2

Nó sẽ hoạt động hoàn toàn tốt trong bảng điều khiển lệnh của Windows. Lỗi này có thể nhận biết được dưới dạng lỗi Eclipse: bug 76936. Xem thêm How to get backspace \b to work in Eclipse’s console?

+0

cảm ơn, nhưng nó vẫn không làm việc trong cửa sổ giao diện điều khiển là tốt. bạn đã thử cái này trên máy của mình chưa. có lẽ đó là vấn đề hệ thống của tôi. – Alfred

+0

Tôi đã sử dụng \ r trong Windows Console (vận chuyển trở về không có nguồn cấp dữ liệu dòng) và nó hoạt động tốt. Tôi sử dụng nó để hiển thị văn bản "xử lý NN%". – helios

-4

bạn đang sử dụng System.out.println ("... ") mà chủ yếu là System.out.print (" ... \ n")

Không sử dụng .println, bạn chỉ cần xóa dòng mới ...

+1

Trong trường hợp đó println ("Hello \ b") sẽ phát ra "Hello \ b \ n" chứ không phải "Hello \ n \ b". Và điều đó không giải thích được glyph. – helios

5

Để nhận được kết quả mong muốn, tức là Hell bạn cần phải thêm một ký tự space sau \b. Bởi vì \b sẽ chỉ di chuyển con trỏ (hầu như) đến 1 vị trí lạc hậu nhưng nó sẽ không xóa nó. Tất cả những gì bạn có thể làm là thay thế ký tự bị xóa bởi space. Như vậy thử dòng sau để có được Hell như đầu ra:

System.out.println("Hello\b "); 

PS: Giải pháp này hoạt động trên hệ điều hành Windows và Ubuntu OS. Đối với hệ điều hành khác, nó có thể hoạt động khác nhau như được giải thích bởi @Kilian Foth ở trên.

+2

Điều này in Hello▯ (+ khoảng trắng) cho tôi ... – tilpner

+1

@StackOverflowException - Lý do cho đầu ra của bạn đã được giải thích bởi Kilian Foth. Hệ điều hành của bạn phải khác với Windows và Ubuntu. –

+0

Cảm ơn bạn; điều này làm việc cho tôi (sử dụng vỏ cá). – Arman

-2

Hãy thử sử dụng thiết bị đầu cuối để thực thi tệp lớp học của bạn.

java classname 

Khi IDE thực thi \ b, nó sẽ tự động bỏ qua. Vì không có thư viện tương ứng trong IDE để chạy \ b. Tuy nhiên, nếu bạn chạy chúng trong terminal, nó có thể được thực thi. Tất cả các thiết bị đầu cuối đều có thư viện đó.

-3

Bạn có thể muốn viết một chức năng để làm điều đó:

def static public String backspace (String str){ 
    return str.substring(0,str.length-1) 
} 
Các vấn đề liên quan