7

私は長い紐を持っていて、それを小さなフィールドに収めたいと思っています。それを実現するために、文字列を空白の行に分割します。アルゴリズムは次のようになります。

    public static string BreakLine(string text, int maxCharsInLine)
    {
        int charsInLine = 0;
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < text.Length; i++)
        {
            char c = text[i];
            builder.Append(c);
            charsInLine++;

            if (charsInLine >= maxCharsInLine && char.IsWhiteSpace(c))
            {
                builder.AppendLine();
                charsInLine = 0;
            }
        }
        return builder.ToString();
    }

しかし、短い単語の後に長い単語が続くと、これは破綻します。最大長が 16 の「foo howcomputerwork」は壊れませんが、壊れてほしいです。次の空白がどこで発生するかを楽しみにしていましたが、それが可能な限り少ない行になるかどうかはわかりません。

4

3 に答える 3

1

文字列ビルダーに書き込む前に文字の内容を確認orし、現在のカウントで確認します。

    public static string BreakLine(string text, int maxCharsInLine)
    {
        int charsInLine = 0;
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < text.Length; i++)
        {
            char c = text[i];
            if (char.IsWhiteSpace(c) || charsInLine >= maxCharsInLine)
            {
                builder.AppendLine();
                charsInLine = 0;
            }
            else 
            {
                builder.Append(c);
                charsInLine++;                    
            }
        }
        return builder.ToString();
    }
于 2013-03-08T21:04:19.523 に答える