[C#]Linqで文字列を文字数ごとに分割するには?

C#

どうも、ちょげ(@chogetarou)です。

System.Linqを使って文字列を特定の文字数ごとに分割する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

System.Linqで文字列を特定の文字数ごとに分割するには、Enumerableを使います。

まず、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を返します。

上記の処理では、まず、Range()で必要な要素数までの数値を生成します。

そして、Range()で生成した数値を、Select()で文字列の特定の範囲の文字列に置換しています。

使用例

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);
        }
    }
}

コメント

タイトルとURLをコピーしました