您的位置:首页 > 其它

中英文数字混合的复合格式处理

2006-06-10 21:22 239 查看
Author:水如烟

曾写过一个How TO:操作字长字符串,现在重新整理,使更方便些.

Public Class uString

Private Sub New()
End Sub

Private Shared gEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("GB2312")

Public Shared Property Encoding() As System.Text.Encoding
Get
Return gEncoding
End Get
Set(ByVal value As System.Text.Encoding)
gEncoding = value
End Set
End Property

Public Shared Function Length(ByVal s As String) As Integer
Return gEncoding.GetByteCount(s)
End Function

Public Shared Function PadLeft(ByVal s As String, ByVal totalWidth As Integer, ByVal paddingChar As Char) As String
Return s.PadLeft(GetValidNum(totalWidth + s.Length - Length(s)), paddingChar)
End Function

Public Shared Function PadLeft(ByVal s As String, ByVal totalWidth As Integer) As String

Return s.PadLeft(GetValidNum(totalWidth + s.Length - Length(s)))
End Function

Public Shared Function PadRight(ByVal s As String, ByVal totalWidth As Integer, ByVal paddingChar As Char) As String
Return s.PadRight(GetValidNum(totalWidth + s.Length - Length(s)), paddingChar)
End Function

Public Shared Function PadRight(ByVal s As String, ByVal totalWidth As Integer) As String
Return s.PadRight(GetValidNum(totalWidth + s.Length - Length(s)))
End Function

Public Shared Function SubString(ByVal Line As String, ByVal Index As Integer, ByVal Len As Integer) As String
Dim num As Integer = Length(Line)
Return gEncoding.GetString(gEncoding.GetBytes(Line), Index, Len)
End Function

Private Shared Function GetValidNum(ByVal num As Integer) As Integer
If num < 0 Then
Return 0
Else
Return num
End If
End Function

Public Shared Function Format(ByVal sformat As String, ByVal arg0 As Object) As String
Return Format(sformat, New Object() {arg0})
End Function

Public Shared Function Format(ByVal sformat As String, ByVal arg0 As Object, ByVal arg1 As Object) As String
Return Format(sformat, New Object() {arg0, arg1})
End Function

Public Shared Function Format(ByVal sformat As String, ByVal arg0 As Object, ByVal arg1 As Object, ByVal arg2 As Object) As String
Return Format(sformat, New Object() {arg0, arg1, arg2})
End Function

Public Shared Function Format(ByVal sformat As String, ByVal args As Object()) As String
Return myFormat(sformat, args)
End Function

Private Shared Function myFormat(ByVal sformat As String, ByVal args As Object()) As String
Dim mysformat As String = sformat

'以下匹配字符串,找的是复合格式{index[,alignment][:formatString]}有alignment的完整项{}
Dim mPattern As String = "{(\d+)([\s]*,[\s]*[-]?)(\d+)(.*?)}"
Dim mMatchs As System.Text.RegularExpressions.MatchCollection
mMatchs = System.Text.RegularExpressions.Regex.Matches(mysformat, mPattern)

'处理各匹配项,重置各项长度
For Each m As System.Text.RegularExpressions.Match In mMatchs

Dim s As String = m.Groups(0).Value '匹配完整项
Dim index As Integer = Convert.ToInt32(m.Groups(1).Value) '格式索引
Dim len As Integer = Convert.ToInt32(m.Groups(3).Value) '原固定长度

Dim NowLen As Integer = AligLen(len, args(index)) '现固定长度
'以下重置固定长度
Dim replace As String = "{${1}${2}" & NowLen.ToString & "${4}}"
Dim Nows As String = m.Result(replace)
mysformat = mysformat.Replace(s, Nows)
Next

Return String.Format(mysformat, args)
End Function

'混合字符文本固定长度的重置
Private Shared Function AligLen(ByVal len As Integer, ByVal arg As Object) As Integer
Return len - Length(arg.ToString) + arg.ToString.Length
End Function
End Class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐