System.Stringクラスでは、インデックスは0から始まります(0-based)。 例えば"ABC"
という文字列の場合、A
のインデックスは0
になります(1
ではなく)。 つまり配列におけるインデックスと同様になります。 Stringクラスの文字列操作メソッドでは、配列同様にインデックスを0
から始まるものとして扱います。
文字列操作とインデックス
Imports System
Class Sample
Shared Sub Main()
Dim s As String = "The quick brown fox jumps over the lazy dog"
' インデックス0の文字(文字列sの1文字目)を表示する
Console.WriteLine(s(0))
' インデックス4から5文字分を切り出して表示する
Console.WriteLine(s.Substring(4, 5))
' 部分文字列"quick"がある位置のインデックスで取得して表示する
Console.WriteLine(s.IndexOf("quick"))
End Sub
End Class
実行結果
T quick 4
インデックスの扱いは、C#やVBといった言語の違いに関わらず、.NET Frameworkですべて共通しています。 なお、Visual Basic 6までは文字列のインデックスは1から始まる(1-based)とされているため、Len
やInStr
といったVBの文字列関数を使ったコードを移植する場合は特に注意が必要です。
n文字目という表記とインデックスの対応について注意を要する場合があります。 例えば、1文字目という表記が文字列のインデックス0
を表す場合もあれば、文字の位置とインデックスを対応させるために0文字目と表記してインデックス0
を指す場合もあります。 一般には前者であることが多いようですが、ドキュメントや文脈によっては後者が用いられる場合もあります。
VB.NETでも引き続きLen
等のVB由来の文字列関数を使用し続けることはできます。 また、一般的には推奨されませんが、C#でもこれらの関数を使うことはできます。 詳しくはVBの文字列関数を参照してください。