2009-12-14 46 views
7

Tôi đang đọc bộ đệm nối tiếp với phương thức readLine(). Chuỗi được trả về bởi readLine() có định dạng "str1: str2". Trong một vòng lặp while khi tôi sử dụng readLine số() lần cho một phản ứng của lệnh cổng nối tiếp tôi nhận được đầu ra kỳ lạ như thế này:Các chuỗi định dạng trong java

String1 : string1 
SString11 : String2 
StringString2 : String23 
String4 : String5 

Nhưng tôi cần đầu ra định dạng như dưới đây

String1  : string1 
SString11  : String2 
StringString2 : String23 
String4  : String5 

tôi đã sử dụng phương thức tách trên chuỗi và nhận được hai chuỗi được phân tách bằng dấu phân cách là ':'. Nhưng bây giờ tôi cần phải nối thêm String1 với các khoảng trắng để căn chỉnh tất cả các dấu hai chấm.

Tôi xin lỗi Nếu giải thích sự cố của tôi là lạ. Nhưng nếu ai hiểu vấn đề, bạn có thể đề nghị làm thế nào để làm điều đó?

Trả lời

6
+1

Tôi đã sử dụng String.format() và đã hoạt động. Nhưng một vấn đề khác là ở đó. Vấn đề là tôi đang đặt chuỗi đầu ra trong một cá thể JTextArea. Tôi đã chọn phông chữ là Arial. Khi in như thế này String.format ("% - 30s:% 30s", temp [0], temp [1]); Nó in như Tên hình ảnh: Firmware cơ bản Linux Phiên bản: 2.1.1.17 Trong hai dòng "I" ở trên Hình ảnh và "V" trong phiên bản từ có độ rộng khác nhau trên vùng văn bản. Vì vậy, mặc dù tôi đang sử dụng chuỗi ký tự 30, các dấu hai chấm không được căn chỉnh. Có giải pháp nào cho điều này? –

+0

hãy xem java.awt.FontMetrics (có thể ... đã lâu rồi kể từ khi tôi quan tâm đến chiều rộng của trường văn bản/khu vực :-) – TofuBeer

+1

Bạn cần sử dụng phông chữ như Courier, điều này được gọi là phông chữ 'đơn cách' có nghĩa là tất cả các ký tự đều có chiều rộng bằng nhau. Điều này tất nhiên có nghĩa là nếu các nhân vật của bạn căn chỉnh trong chuỗi, nó cũng sẽ liên kết với ouput. –

18

Cách dễ nhất để đạt được điều này là sử dụng System.out.format(). Điều này cho phép bạn sử dụng C printf định dạng kiểu định dạng. Một ví dụ:

System.out.format("%-5s:%10s\n", "Name", "Nemo"); 
System.out.format("%-5s:%10d\n", "Age", 120); 

Sản lượng này sẽ:

Name :  Nemo 
Age :  120 

Ngoài ra hãy xem tài liệu cho lớp Formatter để tìm hiểu thêm về cú pháp chuỗi định dạng.

+0

Cảm ơn câu trả lời. Tôi có thể lấy đầu ra được định dạng được lưu trữ trong một chuỗi thay vì gửi đến luồng System.out không? Có API nào không? –

+2

Bạn có thể sử dụng String.format() theo cách tương tự như System.out.format() để nhận kết quả dưới dạng Chuỗi. – tangens

+0

+1 để liên kết với java.util.Formatter có thể hữu ích hơn đối với câu hỏi áp dụng hơn định dạng của System.out() hoặc printf() vì nó có thể định dạng thành luồng tùy ý và không rõ ràng trong bài đăng đích đến của đầu ra là. – charstar

4

System.out.format ("% 30s:% s", str1, str2);

Sẽ in chuỗi đầu tiên có chiều rộng cố định là 30 ký tự.

+0

Tôi thích sự biện minh chính xác của thông số đầu tiên tại đây! –

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