2013-07-03 18 views
12

Khi tôi đang sử dụng ký tự rỗng '\u0000', trình xây dựng chuỗi sẽ ngừng thêm phần tử mới.Tại sao trình xây dựng chuỗi ngừng thêm các phần tử sau khi sử dụng ký tự null?

Ví dụ:

StringBuilder _stringBuilder = new StringBuilder(); 
_stringBuilder.append('\u0000'); 
_stringBuilder.append('a'); 
System.out.println("."+_stringBuilder+"."); 

lợi nhuận

. 

Tôi hiểu rằng giá trị null không nên được in (hoặc in như thế nào nếu đó là một giá trị String null) nhưng trong trường hợp này, tại sao hiện stringbuilder là không thêm nhiều yếu tố?

Lưu ý: Tôi đang sử dụng jdk 1.6.0_38 trên ubuntu.

+0

'\ 0' - null terminator, được sử dụng làm đầu chuỗi trong chuỗi C và C++ – user1516873

+1

Tôi nghi ngờ rằng 'StringBuilder' đã ngừng thêm phần tử mới. Đây có thể là vấn đề hiển thị kết quả 'Chuỗi'. 'Length()' của 'StringBuilder' sau khi thêm một vài phần tử là gì? –

+1

Tôi chạy mã chính xác của bạn trong nhật thực trên jdk 1.6.0_25 trên Win 7 và nó in '. a.' ... có thể là một thứ đặc trưng cho vỏ. – FGreg

Trả lời

7

Ký tự rỗng là ký tự dành riêng cho biết phần cuối của chuỗi, vì vậy nếu bạn in thứ gì đó theo sau \u0000, không có gì khác sau khi được in.


Tại sao StringBuilder ngừng thêm các yếu tố sau khi sử dụng các ký tự null? Nó không thực sự java, nó là thiết bị đầu cuối của bạn mà xử lý \u0000 như là kết thúc của chuỗi.

Như ai đó nói, với Windows đầu ra có thể là .a. (tôi đã không kiểm tra), điều này là do cửa sổ thiết bị đầu cuối hoạt động khác với thiết bị đầu cuối hệ thống dựa trên Unix. Tôi khá chắc chắn rằng nếu bạn chạy mã này trên một máy OSX bạn sẽ nhận được kết quả tương tự như một bạn nhận được trên linux

+2

Nó in một' .', một hộp (cho ký tự rỗng), một 'a' và' .' trên bởi cửa sổ máy. –

+0

@BheshGurung Tôi nghĩ rằng điều này là do các hệ thống UNIX hoạt động khác với các cửa sổ, về mặt lý thuyết nếu bạn thử cùng một thứ trên OSX, nó nên in '.' – BackSlash

+2

Ký tự null không được sử dụng để chấm dứt các chuỗi trong Java. – Kayaman

7

stringBuilder của bạn vẫn gắn thêm các yếu tố, xem:

StringBuilder stringBuilder = new StringBuilder(); 
stringBuilder.append('\u0000'); 
System.out.println(stringBuilder.length()); // prints 1 
stringBuilder.append('a'); 
System.out.println(stringBuilder.length()); // prints 2 

tôi đoán là bảng điều khiển của bạn dừng in sau ký tự chấm dứt \u0000. Một giao diện điều khiển khác có thể xử lý khác nhau.

1

Tôi đã thử nghiệm của bạn và nó không thất bại trong Eclipse trên hệ thống Windows 7 của tôi. Tuy nhiên, chạy chương trình thử nghiệm này sẽ phân biệt giữa không phụ thêm và không in. Tôi đề nghị chạy nó trong môi trường thất bại.

public class Test { 
    public static void main(String[] args){ 
    StringBuilder _stringBuilder = new StringBuilder(); 
    _stringBuilder.append('\u0000'); 
    _stringBuilder.append('a'); 
    System.out.println("."+_stringBuilder+"."); 
    System.out.println(_stringBuilder.length()); 
    System.out.println(_stringBuilder.charAt(1)); 
    } 
} 

Nếu sự cố không phụ thêm, độ dài sẽ nhỏ hơn 2 và nỗ lực in ký tự ở chỉ mục 1 sẽ không thành công. Nếu sự cố không được in, độ dài sẽ là 2 và ký tự ở chỉ mục 1 sẽ là 'a'.

Tôi nghĩ rằng việc in không có nhiều khả năng hơn là không phụ thêm.

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