どうも、ちょげ(@chogetarou)です。
文字列を特定の文字数ごとに分割する方法を紹介します。
方法

文字列を特定の文字数ごとに分割する方法は、2つあります。
forループ
1つは、forループを使う方法です。
まず、forループします。
forループの変数の初期値に0、条件に変数が文字列の長さ未満を指定します。
forループの変数を分割する際の文字数でインクリメントします。
次に、ループ処理内でEnumerableに、文字列のSubstring()メソッドを渡します。
SubString()メソッドの第1引数にforループの変数、第2引数にMath.Min()を指定します。
そして、Math.Min()の第1引数に分割する際の文字数、第2引数に文字列の長さをループ変数で引いた値を指定します。
public static IEnumerable<string> Split(string text, int size)
{
for(var i = 0; i < text.Length; i += size)
{
yield return text.Substring(i, Math.Min(size, text.Length - i));
}
}
上記のforループは、文字列を特定の文字数ごとに分割したEnumerableを生成します。
使用例
using System;
using System.Collections.Generic;
public class Example
{
public static IEnumerable<string> Split(string text, int size)
{
if (String.IsNullOrEmpty(text) || size < 1)
{
throw new ArgumentException();
}
for(var i = 0; i < text.Length; i += size)
{
yield return text.Substring(i, Math.Min(size, text.Length - i));
}
}
public static void Main()
{
string text = "123456789";
IEnumerable<string> names = Split(text, 3);
foreach(var name in names)
{
Console.WriteLine(name);
}
}
}
/*
出力:
123
456
789
*/
System.Linq
もう1つは、System.Linqを使う方法です。
まず、System.Linqを導入します。
using System.Linq;
次に、EnumerableからRange()を呼び出します。
Range()のの第1引数に0を指定し、第2引数で文字列の長さを分割する際の文字数で割ります、
Range()からSelect()を呼び出します。
そして、Select()の引数に、文字列のSubstring()メソッドを返すラムダ式を指定します。
SubString()メソッドの第1引数にラムダ式の引数と文字数の積、第2引数に文字数を指定します。
//text=分割する文字列、size=分割する際の文字数
Enumerable.Range(0, text.Length / size)
.Select(i => text.Substring(i * size, size))
上記のSelect()は、文字列を特定の文字数ごとに分割したEnumerableを返します。
使用例
using System;
using System.Collections.Generic;
using System.Linq;
public class Example
{
public static IEnumerable<string> Split(string text, int size)
{
if (String.IsNullOrEmpty(text) || size < 1)
{
throw new ArgumentException();
}
return Enumerable.Range(0, text.Length / size)
.Select(i => text.Substring(i * size, size));
}
public static void Main()
{
string text = "123456789";
IEnumerable<string> names = Split(text, 3);
foreach(var name in names)
{
Console.WriteLine(name);
}
}
}

まとめ
文字列を文字数ごとに分割する方法は、次の2つです。
- forループを使う方法
- System.Linqを使う方法
コメント