[C#]forループで文字列を文字数ごとに分割するには?

C#

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

forループを使って文字列を特定の文字数ごとに分割する方法を紹介します。

スポンサーリンク

方法

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

forループで文字列を特定の文字数ごとに分割するには、Substringを使います。

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

上記の処理では、まず、Substring()で文字列から文字数ごとに切り取った文字列をEnumerable()に追加します。

そして、Math.Min()で文字数未満の場合に、残りの文字数で分割するようにします。

スポンサーリンク

使用例

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
*/

コメント

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