将字符串缓冲区分成80个字符的块

时间:2011-04-20 10:53:28

标签: java string

我想用StringBuffer创建一个字符串数组。我需要每80个字符中断缓冲区。因此,数组中的第一个字符串元素将包含缓冲区中的前80个字符,第二个元素将包含缓冲区中的后80个字符。缓冲区大小可能无法被80整除。因此,数组的最后一个字符串元素可能包含其余的小于或等于80个字符。

考虑到String的子字符串函数可能会使索引超出范围异常,最好的方法是什么?

4 个答案:

答案 0 :(得分:7)

请确保您不要求太多:

String[] splitBuffer(StringBuffer input, int maxLength)
{
    int elements = (input.length() + maxLength - 1) / maxLength;
    String[] ret = new String[elements];
    for (int i = 0; i < elements; i++)
    {
        int start = i * maxLength;
        ret[i] = input.substring(start, Math.min(input.length(),
                                                 start + maxLength));
    }
    return ret;
}

您可能需要考虑返回List<String>而不是String[],因为它们通常更方便使用。

答案 1 :(得分:3)

或者以正则表达方式执行:

public static String[] splitBuffer(CharSequence input, int maxLength) {
    return input.toString().split("(?<=\\G.{" + maxLength + "})");
}

说明: \G是最后一场比赛的占位符

答案 2 :(得分:0)

我认为你应该使用getChars(int, int, char[], int)

答案 3 :(得分:0)

您可以使用StringUtils.substring(String str, int start, int end)代替普通的String子字符串方法。这种方法永远不会抛出异常。