コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】指定されたバイト数で文字列を分割して返す拡張メソッド

ソースコード

using System.Collections.Generic;
using System.Text;

public static class StringExt
{
    /// <summary>
    /// 指定されたバイト数で文字列を分割して返します
    /// </summary>
    public static IList<string> SplitByMultiByte( this string self, int count )
    {
        var result      = new List<string>();
        var output      = string.Empty;
        var encoding    = Encoding.GetEncoding( "Shift_JIS" );

        if ( string.IsNullOrEmpty( self ) || count <= 0 ) return result;

        for ( int i = 0; i < self.Length; i++ )
        {
            var str         = self[ i ].ToString();
            var totalLength = encoding.GetByteCount( output ) + encoding.GetByteCount( str );

            if ( totalLength == count )
            {
                result.Add( output + str );
                output = string.Empty;
            }
            else if ( count < totalLength )
            {
                result.Add( output );
                output = str;
            }
            else
            {
                output += str;
            }
        }

        if ( !output.Equals( string.Empty ) )
        {
            result.Add( output );
        }

        return result;
    }
}

使い方

var str1 = "ピカチュウカイリューヤドラン";

foreach ( var n in str1.SplitByMultiByte( 10 ) )
{
    Console.WriteLine( n );
}

var str2 = "1111122222333334444455555";

foreach ( var n in str2.SplitByMultiByte( 5 ) )
{
    Console.WriteLine( n );
}
ピカチュウ
カイリュー
ヤドラン
11111
22222
33333
44444
55555

参考サイト様

関連記事