PadLeft は文字通り、詰め物を加える動作(pad)は行いますが、切り抜く動作は行いません。
String.PadLeft メソッド の説明におきましても、『指定された文字数になるまで』左側に埋め込むとの記述がありますね。
'"0000FF98" … 元が8文字であるため、既に5文字より長いために無加工で返される
Dim s1 = "0000FF98".PadLeft(5, "0"c)
'"000000FF98" … 元が8文字だったので、10桁になるまで2文字埋めて返される
Dim s2 = "0000FF98".PadLeft(10, "0"c)
'"00000" … 元が0文字だったので、5桁になるまで5文字埋めて返される
Dim s3 = "".PadLeft(5, "0"c)
'"" … 元の文字数と指定された桁数が等しいため、同じ内容の文字列が返される
Dim s4 = "".PadLeft(0, "0"c)
Dim x As Integer = 65432
'"0000FF98" … 8桁の大文字16進数
Dim h1 = $"{x:X8}" ' h1 = x.ToString("X8")
'"0000ff98" … 8桁の小文字16進数
Dim h2 = $"{x:x8}" ' h2 = x.ToString("x8")
'"0FF98" … 5桁の大文字16進数
Dim h3 = $"{x:X5}" ' h3 = x.ToString("X5")
'"FF98" … 元値が既に3文字を超えている場合、3桁に切り出されるわけではない
Dim h4 = $"{x:X3}" ' h4 = x.ToString("X3")
'"00FF98 " … 6桁HEXの末尾に空白2桁 (8桁幅に左寄せの6桁大文字16進数)
Dim h5 = $"{x,-8:X6}"
'" 00ff98" … 6桁hexの先頭に空白2桁 (8桁幅に右寄せの6桁小文字16進数)
Dim h6 = $"{x,8:x6}"
なお、PadLeft に渡した桁数が「元の文字列と同じ桁数」だった場合と「元文字列より少なかった桁数」の場合、得られる文字列の内容は同じですが、インスタンスという点で差異が生じます。
Dim a = "xyz" '3文字
Dim b = a.PadLeft(2, "0"c) '元の文字数を下回る桁数を指定
Dim c = a.PadLeft(3, "0"c) '元の文字列と等しい桁数を指定
Dim d = a.PadLeft(4, "0"c) '元の文字数を上回る桁数を指定
上記を実行した場合、下記の結果になります。
- 「If a = b Then」は True であり、「If a Is b Then」も True
- 「If a = c Then」は True ですが、「If a Is c Then」は False
- 「If a = d Then」は Falseであり、「If a Is d Then」も False