vb.net按字節截取字符串代碼

'■MidB
''' 
<summary>Mid関數のバイト版。文字數と位置をバイト數で指定して文字列を切り抜く。</summary>
''' <param name="str">対象の文字列</param>
''' <param name="Start">切り抜き開始位置。全角文字を分割するよう位置が指定された場合、戻り値の文字列の先頭は意味不明の半角文字となる。</param>
''' <param name="Length">切り抜く文字列のバイト數</param>
''' <returns>切り抜かれた文字列</returns>
''' <remarks>最後の1バイトが全角文字の半分になる場合、その1バイトは無視される。</remarks>
Public Function MidB(ByVal str As StringByVal Start As IntegerOptional ByVal Length As Integer = 0) As String

    '▼空文字に対しては常に空文字を返す

    If str = "" Then
        Return
 ""
    
End If

    '▼Lengthのチェック

    'Length0か、Start以降のバイト數をオーバーする場合はStart以降の全バイトが指定されたものとみなす。

    Dim RestLength As Integer = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str) - Start + 1

    If Length = 0 OrElse Length > RestLength Then
        
Length = RestLength
    End If

    '▼切り抜き

    Dim SJIS As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift-JIS")
    Dim B() As Byte = CType(Array.CreateInstance(GetType(Byte), Length), Byte())

    Array.Copy(SJIS.GetBytes(str), Start - 1, B, 0, Length)

    Dim st1 As String = SJIS.GetString(B)

    '▼切り抜いた結果、最後の1バイトが全角文字の半分だった場合、その半分は切り捨てる。

    Dim ResultLength As Integer = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(st1) - Start + 1

    If Asc(Strings.Right(st1, 1)) = 0 Then
        
'VB.NET2002,2003の場合、最後の1バイトが全角の半分の時
        
Return st1.Substring(0, st1.Length - 1)
    ElseIf Length = ResultLength - 1 Then
        
'VB2005の場合で最後の1バイトが全角の半分の時
        
Return st1.Substring(0, st1.Length - 1)
    Else
        
'その他の場合
        
Return st1
    End If

End Function

 

 

 

使用例

 

Dim St As String ="VB中學校"

Dim Result1 As String = Mid(St, 2, 3)   'B中學

Dim Result2 As String =MidB(St, 2, 3)   'B中

Dim Result3 As String = Mid(St,2, 2)    'B中

Dim Result4 As String =MidB(St, 2, 2)   'B

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章