中英文数字混合的复合格式处理
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
曾写过一个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
相关文章推荐
- 中英文数字混合的复合格式处理
- Java调用Zebra条码打印机打印条码、中英文数字条码混合标签,可自由控制格式和排版
- Java调用Zebra条码打印机打印条码、中英文数字条码混合标签,可自由控制格式和排版
- Java调用Zebra条码打印机打印条码、中英文数字条码混合标签,可自由控制格式和排版(2)
- Java调用Zebra条码打印机打印条码、中英文数字条码混合标签,可自由控制格式和排版(2)
- (转)Java调用Zebra条码打印机打印条码、中英文数字条码混合标签,可自由控制格式和排版
- SQL SERVER2000教程-第五章 处理数据 第十三节 设定数字日期格式
- tabHost---几种数字格式处理方法
- Oracle中数字格式的文本化处理
- 中英文数字字符等混合字符串精确测量字符大小并两种方式绘制比较
- 数字图像处理 CImage类的使用与封装(jpg png gif tif bmp等格式图像的加载、数据读写、保存等功能)
- 中英文字符混合处理方法
- Oracle- 日期格式和数字类型处理
- 在Word中输入类似如此格式①②③..⑩的数字,超过10的话如何处理呢?
- 数字图像处理(第三版)—bmp图像的格式
- c++ 从混合中英文数字等的string 中按顺序分别输出
- jstl中处理日期格式,小数,数字,百分比 fmt
- java处理数字格式的几种方式
- ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)
- 取中英文数字混合的长度 ( C# + ORACLE )