我想將一個任意長度的字符串格式化爲一個固定寬度的字段來顯示。如何在.Net中將字符串格式化爲固定寬度字段?
我們以20的寬度爲例,並調用要格式化的字符串s。我將格式化的字符串添加到名爲b的StringBuilder中。
Dim b As New System.Text.StringBuilder()
Dim s as New String
如果我要顯示的字符串長度超過20個字符的短,我可以這樣做:
b.Append(s.PadRight(20))
或
b.AppendFormat("{0,-20}", s)
到目前爲止,一切都很好。但是,如果字符串的長度超過20個字符,我希望該字符串被截斷爲20個字符,因爲它被追加。上面的代碼附加整個字符串。
我嘗試這樣做:
b.Append(s.Substring(0,20).PadRight(20))
但是,這觸發一個例外,如果字符串是少於20個字符。
所以,我結束了:
b.Append(s.PadRight(20).Substring(0,20))
這似乎做的工作。 PadRight通過在子字符串執行之前確保字符串有20個字符來防止該異常。
我想知道是否有一個替代方法,看起來更優雅,避免填充字符串,以防止子字符串導致異常。我錯過了可以在一個步驟中完成此操作的String.Format功能嗎?
編輯補充解決方案:
我結束了下面的代碼:
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
它使用一個擴展方法來清理語法,喬爾和Merlyn,和用途的建議StringBulider追加重載以避免創建必須被垃圾回收的新字符串,正如supercat所建議的那樣。感謝那些幫助。
你結束了正好我用在需要做到這一點的代碼。我認爲這是完成你所需要的最簡單的方法。 – David