Разбейте строковый буфер на порцию из 80 символов - PullRequest
1 голос
/ 20 апреля 2011

Я хочу создать массив строк из StringBuffer. Мне нужно разбить буфер на каждые 80 символов. Таким образом, первый строковый элемент в массиве будет содержать первые 80 символов из буфера, второй элемент будет содержать следующие 80 символов из буфера. Размер буфера может не делиться на 80. Таким образом, последний строковый элемент массива может иметь остаток, который может быть меньше или равен 80 символам.

Каков наилучший способ сделать это, учитывая, что функция подстроки String может получить исключение индекса за пределами границ?

Ответы [ 4 ]

7 голосов
/ 20 апреля 2011

Просто убедитесь, что вы не просите слишком много:

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[], поскольку с ними часто удобнее работать.

3 голосов
/ 20 апреля 2011

Или используйте метод регулярных выражений:

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

Объяснение: \G является заполнителем для последнего совпадения

0 голосов
/ 20 апреля 2011

Вы можете использовать StringUtils.substring (String str, int start, int end) вместо обычного метода подстроки String. Этот метод никогда не вызовет исключение.

0 голосов
/ 20 апреля 2011

Я думаю, что вы должны использовать getChars (int, int, char [], int)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...