我想用StringBuffer创建一个字符串数组。我需要每80个字符中断缓冲区。因此,数组中的第一个字符串元素将包含缓冲区中的前80个字符,第二个元素将包含缓冲区中的后80个字符。缓冲区大小可能无法被80整除。因此,数组的最后一个字符串元素可能包含其余的小于或等于80个字符。
考虑到String的子字符串函数可能会使索引超出范围异常,最好的方法是什么?
答案 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子字符串方法。这种方法永远不会抛出异常。