gpt4 book ai didi

.net - 如何将字符串格式化为 .Net 中的固定宽度字段?

转载 作者:行者123 更新时间:2023-12-04 00:25:29 27 4
gpt4 key购买 nike

我正在尝试将任意长度的字符串格式化为固定宽度的字段以进行显示。

我们以宽度为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 通过确保在执行 Substring 之前字符串有 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

这使用扩展方法来清理语法,如 Joel 和 Merlyn 所建议的,并使用 StringBulider Append 重载来避免创建必须被垃圾收集的新字符串,如 supercat 所建议的。感谢那些提供帮助的人。

最佳答案

I was wondering if there is an alternate method that would look more elegant and avoid padding the string



(强调)
<Extension()> _
Public Function AppendFixed(ByVal target As StringBuilder, ByVal value As String, ByVal desiredLength As Integer) As StringBuilder
If value.Length < desiredLength Then value.PadRight(desiredLength)
Return target.Append(value.Substring(0,desiredLength))
End Function

要使用它:
b.AppendFixed(s, 20)

关于.net - 如何将字符串格式化为 .Net 中的固定宽度字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6904923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com