Tôi đang cố định dạng một chuỗi có độ dài tùy ý thành trường chiều rộng cố định để hiển thị.Làm cách nào để định dạng chuỗi thành trường chiều rộng cố định trong .Net?
Hãy sử dụng chiều rộng 20 làm ví dụ và gọi chuỗi được định dạng s. Tôi đang thêm chuỗi được định dạng vào một StringBuilder có tên b.
Dim b As New System.Text.StringBuilder()
Dim s as New String
Nếu chuỗi Tôi muốn hiển thị là ngắn hơn 20 ký tự, tôi có thể làm điều này:
b.Append(s.PadRight(20))
hoặc
b.AppendFormat("{0,-20}", s)
Cho đến nay, như vậy tốt. Nhưng, nếu chuỗi dài hơn 20 ký tự, tôi muốn chuỗi bị cắt ngắn thành 20 ký tự khi được thêm vào. Đoạn mã trên gắn thêm toàn bộ chuỗi.
Tôi cố gắng này:
b.Append(s.Substring(0,20).PadRight(20))
Nhưng, điều này bắn một ngoại lệ nếu chuỗi là ngắn hơn 20 ký tự.
Vì vậy, tôi đã kết thúc với:
b.Append(s.PadRight(20).Substring(0,20))
Điều này dường như thực hiện công việc. PadRight ngăn chặn ngoại lệ bằng cách đảm bảo chuỗi ký tự có 20 ký tự trước khi chuỗi con được thực hiện.
Tôi đã tự hỏi nếu có một phương pháp thay thế sẽ trông thanh lịch hơn và tránh đệm chuỗi chỉ để ngăn chặn chuỗi con gây ra một ngoại lệ. Tôi đã bỏ lỡ một tính năng của String.Format có thể thực hiện điều này trong một bước?
Edited để thêm giải pháp:
tôi đã kết thúc với đoạn mã sau:
Module Extensions
<Extension()> _
Function AppendFixed(ByVal b As StringBuilder, ByVal s As String, ByVal width As Integer) As StringBuilder
If s.Length >= width Then
b.Append(s, 0, width)
Else
b.Append(s)
b.Append(" ", width - s.Length)
End If
Return b
End Function
End Module
này sử dụng một phương pháp khuyến nông để làm sạch các cú pháp, theo đề nghị của Joel và Merlyn, và cách sử dụng StringBulider Nối các quá tải để tránh tạo các chuỗi mới sẽ phải thu gom rác, như được gợi ý bởi supercat. Nhờ những người đã giúp.
Bạn đã kết thúc với chính xác mã tôi sử dụng để làm điều này khi cần thiết. Tôi nghĩ đó là cách đơn giản nhất để hoàn thành những gì bạn cần. – David