文字列を切り出す方法をまとめました。
文字列の切り出し(1文字)
文字列から文字を切り出したい場合、[ ](インデクサー)を使います。
インデクサーを使うと文字列を文字の配列のように扱えます。
[ ] の中に0から始まるインデックスを指定します。
インデックスの範囲外を指定した場合はエラーになるので注意が必要です。
^ をインデックスの前に付けると後ろから n番目 という意味になります。
一番最後の文字は [^1] になります。[^0]はエラーになるので注意が必要です。
using System;
class Program
{
public static void Main()
{
string str = "abcde";
Console.WriteLine(str[0]); // a 1文字目:インデックスは0
Console.WriteLine(str[1]); // b 2文字目:インデックスは1
Console.WriteLine(str[2]); // c 3文字目:インデックスは2
Console.WriteLine(str[3]); // d 4文字目:インデックスは3
Console.WriteLine(str[4]); // e 5文字目:インデックスは4
Console.WriteLine(str[^1]); // e
Console.WriteLine(str[^2]); // d
Console.WriteLine(str[^3]); // c
Console.WriteLine(str[^4]); // b
Console.WriteLine(str[^5]); // a
}
}
インデックスの最後を表す ^ はC#8.0で登場した機能で、古いバージョンでは使えません。
^ を使わずに最後からn番目の指定をする場合は、Lengthプロパティを使用します。
using System;
class Program
{
public static void Main()
{
string str = "abcde";
Console.WriteLine(str[str.Length - 1]); // e
Console.WriteLine(str[str.Length - 2]); // d
Console.WriteLine(str[str.Length - 3]); // c
Console.WriteLine(str[str.Length - 4]); // b
Console.WriteLine(str[str.Length - 5]); // a
}
}
文字列の部分切り出し(範囲指定)
文字列の切り出し(例えば “abcdef” から2文字目から4文字目まで(bcd)を切り出すなど)はインデクサーの範囲指定( .. )を使います。
[start..end]
startには開始インデックス、endには末尾インデックスを指定します。
切り出される範囲はstartインデックス~endインデックス-1 になるので注意です。
using System;
class Program
{
public static void Main()
{
string str = "abcdef";
Console.WriteLine(str[1..4]); //bcd インデックス1~3まで、4は含まれない
Console.WriteLine(str[1..^2]); //bcd 後ろからn番目という指定もできる
Console.WriteLine(str[^5..^2]); //bcd
//startとendを省略すると全範囲になる
Console.WriteLine(str[..]); //abcdef
//endを省略するとstart~最後までになる
Console.WriteLine(str[2..]); //cdef
//startを省略すると0~endまでになる
Console.WriteLine(str[..4]); //abcd
}
}
インデックスの範囲指定はC#8.0から登場した機能で、古いバージョンでは使えません。
範囲指定を使わずに切り出しを行う場合は、Substringメソッドを使います。
文字列の部分切り出し(Substringメソッド)
Substringメソッドは第1引数に開始インデックス、第2引数に切り出す文字数を指定します。
戻り値が切り取られた文字列になります。元の文字列の入った変数自体の値が変わったわけではないので注意が必要です。
using System;
class Program
{
public static void Main()
{
string str = "abcdef";
Console.WriteLine(str.Substring(1, 3)); //bcd
Console.WriteLine(str); //abcdef
}
}
開始インデックスだけ指定して最後まで切り出したい場合は、第1引数だけを指定します。
最初の文字から末尾インデックスを指定して切り出したいという場合はLengthプロパティと組み合わせます。
using System;
class Program
{
public static void Main()
{
string str = "abcdef";
Console.WriteLine(str.Substring(2)); //cdef
Console.WriteLine(str.Substring(0, str.Length - 2)); //abcd
}
}
C# 記事まとめページに戻る(他のサンプルコードもこちら)
コメント