加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-17 00:30:47 所属栏目:大数据 来源:网络整理
导读:我正在尝试将任意长度的字符串格式化为固定宽度字段以供显示. 我们使用宽度20作为示例,并调用要格式化的字符串s.我将格式化的字符串添加到名为b的StringBuilder中. Dim b As New System.Text.StringBuilder()Dim s as New String 如果我要显示的字符串短于20
我正在尝试将任意长度的字符串格式化为固定宽度字段以供显示.

我们使用宽度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,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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读