[C#]指定した幅(byte数)で文字列を分割する(全角文字対応版)

指定された文字列を指定したbyte数単位で分割し、結果を配列として返す関数です。
byte数は、SJISとして解釈した場合での計算となります。

本関数は、phpで言うところのマルチバイト対応版str_split()関数のようなものです。

//*********************************************************************
/// <summary>文字列を指定した文字数単位で分割する(全角文字考慮)
/// </summary>
/// <param name="inStr">  分割前文字列</param>
/// <param name="length"> 1行の長さ</param>
/// <returns>             分割後文字列の配列</returns>
//*********************************************************************
private string[] mbStrSplit( string inStr, int length ) {
    List<string> outArray = new List<string>(); // 分割結果の保存領域
    string       outStr   = "";                 // 現在処理中の分割後文字列
    Encoding     enc      = Encoding.GetEncoding("Shift_JIS");
 
 
    // パラメータチェック
    if ( inStr == null || length < 1 ) {
        return outArray.ToArray();
    }
 
    //--------------------------------------
    // 全ての文字を処理するまで繰り返し
    //--------------------------------------
    for ( int offset = 0; offset < inStr.Length ; offset++ ) {
        //----------------------------------------------------------
        // 今回処理する文字と、その文字を含めた分割後文字列長を取得
        //----------------------------------------------------------
        string curStr         = inStr[offset].ToString();
        int    curTotalLength = enc.GetByteCount( outStr ) + enc.GetByteCount( curStr );
 
        //-------------------------------------
        // この文字が、分割点になるかチェック
        //-------------------------------------
        if ( curTotalLength == length ) {
            // 処理中の文字を含めると、ちょうどピッタリ
            outArray.Add( outStr + curStr );
            outStr = "";
        } else if ( curTotalLength > length ) {
            // 処理中の文字を含めると、あふれる
            outArray.Add( outStr );
            outStr = curStr;
        } else {
            // 処理中の文字を含めてもまだ余裕あり
            outStr += curStr;
        }
    }
 
    // 最後の行の文を追加する
    if ( !outStr.Equals( "" ) ) {
        outArray.Add( outStr );
    }
 
    // 分割後データを配列に変換して返す
    return outArray.ToArray();
}




ちなみに全角文字チェックは行っていますが、禁則処理には対応していません。
この為、行頭に「。」、「々」、「っ」などが出てくる可能性が有ります。

関連記事

コメントを残す

メールアドレスが公開されることはありません。