Разделение строки на равные подстроки в Java: методы и примеры

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для разделения строки в Java на части одинакового размера можно использовать цикл for в сочетании с методом substring(). Вот пример кода, который разбивает строку str на фрагменты длиной n:

Java
Скопировать код
String str = "exampleString"; // наша образцовая строка
int n = 3;
List<String> chunks = new ArrayList<>();
for (int i = 0; i < str.length(); i += n) {
    chunks.add(str.substring(i, Math.min(str.length(), i + n)));
}

В результате в списке chunks получим подстроки длиной n символов каждая. При этом учитывается и последняя подстрока, которая может быть короче.

Кинга Идем в IT: пошаговый план для смены профессии

Анализ процесса

В Java существует множество способов разделения строк. Давайте посмотрим на инструменты, которые мы можем использовать для решения этой задачи.

Обсуждение regex и non-regex

Регулярные выражения обеспечивают быстрое разделение строк, например так:

Java
Скопировать код
String[] substrings = str.split("(?<=\\G.{" + n + "})"); // почти магия

Тем не менее, у них есть недостатки:

  • Сложность: Регулярные выражения увеличивают сложность кода, особенно при работе с подстроками разной длины.
  • Производительность: Нередко подходы без применения регулярных выражений бывают более эффективными и надёжными.
  • Совместимость: Некоторые платформы, включая Android, не поддерживают использование \G в регулярных выражениях.
  • Читаемость: Код без использования регулярных выражений значительно понятнее.

Рассматриваемые библиотеки

Библиотека Guava от Google предоставляет удобные инструменты для работы со строками:

Java
Скопировать код
Iterable<String> chunks = Splitter.fixedLength(n).split(str);

Этот подход с применением константы splitter предельно удобен, а также обеспечивает легкость повторного использования.

Обход UTF-16

Если ваши строки содержат символы вне Базовой многоязычной плоскости (BMP), учтите, что Java кодирует их двумя символами char. Поэтому, разбивая строки, следует быть осторожными, чтобы не столкнуться с непредвиденными проблемами.

Обработка неожиданностей

В программировании умение управлять граничными случаями — залог успеха. Не допускайте, чтобы они управляли вами.

Обработка крайних случаев

Вместо использования Math.ceil(), которое может привести к проблемам с вычислениями с плавающей точкой, вычислите количество подстрок вручную:

Java
Скопировать код
int numChunks = (str.length() + n – 1) / n;

Эффективное разделение на подстроки с переменной длиной

Если требуется получить подстроки разной длины, эффективнее будет организовать пользовательский цикл без использования сложных и неэффективных регулярных выражений.

Кэширование вашего splitter'а

Если регулярно требуется разделять строки, сохраните splitter в константу — это улучшит эффективность алгоритма и возможности для повторного использования. Отлично, если можно съесть кусок торта и сохранить его!

Избегайте ловушек регулярных выражений

Регулярные выражения могут быть полезными, но не всегда подходят для задач, требующих масштабности и кроссплатформенности.

Визуализация

Представьте процесс разделения строки. Как будто вы разрезаете её на равные части:

Markdown
Скопировать код
До разделения: |🍫🍫🍫🍫🍫🍫🍫🍫|

А после — получаете:

Markdown
Скопировать код
После разделения: |🍫🍫|🍫🍫|🍫🍫|🍫🍫|

В Java это будет выглядеть так:

Java
Скопировать код
"Chocolate".match(/.{1,2}/g); // "Ch", "oc", "ol", "at", "e"

Здесь каждая пара 🍫🍫 — это подстрока, а целая строка — это то, что было раньше, целый шоколадный батончик.

Полезные материалы

  1. String (Java Platform SE 8) — изучение класса String в Java.
  2. StringUtils (Apache Commons Lang 3.14.0 API) — инструментарий для работы со строками.
  3. Split string to equal length substrings in Java – Stack Overflow — обсуждение способов разделения строки на подстроки в сообществе.
  4. Split() String method in Java with examples – GeeksforGeeks — анализ метода split().
  5. Pattern (Java Platform SE 8 ) — обновите свои знания о регулярных выражениях.
  6. Substring in Java – javatpoint — подробнее о методе substring.
  7. Parse text – Java Practices — сжатый курс по разделению строк.