Как повторить текст X раз: разделители, переносы и ограничения
Зачем повторяют текст, как разделители и нумерация меняют результат и какие ограничения стоит знать до того, как вставить куда-то 50 000 копий.
Впервые пара сотен копий одной строки понадобилась мне для сида базы. Нужно было описание товара такой длины, чтобы оно вылезло за ширину колонки, и стало видно, справится вёрстка карточки или поедет. Набирать «test » руками надоело копии на девятой.
Это скучная причина повторять текст. Есть и вторая: Discord, где кому-то нужно «ха» двести раз в одном сообщении.
Зачем это нужно на практике
Чаще всего — тестовые данные. Строка известной длины, чтобы проверить обрезку. Огромная ячейка, чтобы понять, скроллится таблица или режет содержимое. Абзац, которого хватит, чтобы сработало сворачивание «читать дальше». Дизайнеры делают похожее с текстом-рыбой, хотя для связного текста генератор Lorem Ipsum читается лучше, чем одно и то же предложение сорок раз подряд.
Дальше идёт всё социальное: повторённые эмодзи в комментарии, слово, растянутое на весь чат, припев с повторяющейся строчкой. Из того же набора приёмов — перевёрнутый текст: строка вверх ногами вставляется в ник или статус ровно так же, обычными символами. Часть этого — шутка, часть — спам, и граница проходит там, где её провели правила конкретного сервера.
Третья группа тише: те, кто готовит строки. Пятьдесят копий шаблонной строки, вставить в таблицу и править на месте. Когда количество должно быть точным, это быстрее, чем тянуть маркер заполнения и вглядываться в номера строк.
Разделитель решает почти всё
Здесь чаще всего и промахиваются. По умолчанию повторитель текста склеивает копии вплотную, поэтому «ха» пять раз даёт «хахахахаха». Если копии должны быть разделены, нужен вариант с пробелом, а замечаешь это обычно на одно нажатие позже — уже после вставки.
Разница между переносом строки и пустой строкой важнее, чем кажется. Один перенос ставит копии плотно, по одной на строку. Пустая строка между ними даёт абзацы — то, что нужно, когда каждая копия сама по себе предложение и вы смотрите на вертикальный ритм.
Поле своего разделителя понимает экранированные последовательности: \n даёт перенос строки, \t — табуляцию. Их можно повторять, если нужно больше воздуха: \n\n\n.
Нумерация превращает вывод в список
Отметьте «Нумеровать копии» вместе с переносом строки — и получится 1., 2., 3. сверху вниз. Я так делаю каркасы чек-листов и тестовые данные, где индекс должен быть виден внутри самой строки. Поставьте вместо переноса запятую, и та же галочка соберёт одну нумерованную последовательность в строку — иногда именно этого и ждёт шапка таблицы.
Ограничения и откуда они взялись
Потолок — 100 000 повторов или 2 000 000 символов, что наступит раньше. Это не декоративная осторожность. Текстовое поле с несколькими миллионами символов заставляет браузер пересчитывать вёрстку на каждое нажатие, и вкладка перестаёт вести себя как вкладка. Когда предел останавливает вывод, сообщение под настройками показывает, сколько копий реально поместилось.
Эмодзи считаются странно, и это не ошибка. JavaScript измеряет длину строки в кодовых единицах UTF-16, а эмодзи семьи 👨👩👧 — это три отдельных человечка, сшитых двумя невидимыми соединителями: восемь единиц на один видимый значок. Повторите его тысячу раз, и счётчик покажет 8000. Discord считает так же, поэтому сообщение «из одного эмодзи» легко оказывается сообщением на 2000 единиц.
Последнее слово за площадкой
Discord ограничивает сообщение 2000 символами и притормаживает одинаковые отправки подряд. Telegram разрешает 4096 символов в сообщении, но только 1024 в подписи к медиа. Instagram незаметно прячет комментарии из явно повторяющихся строк.
Инструмент сгенерирует всё, о чём его попросили. А доедет ли результат до адресата, решают уже чужие правила.
Нужен блок повторённого текста прямо сейчас? Повторитель текста собирает его в браузере, а если результат надо сверить с лимитом площадки, рядом лежит счётчик символов.