Удаление повторяющихся строк

Оставляем первое вхождение, убираем последующие повторы и подробно показываем, какая строка откуда исчезла

Инструменты текста и учёбы

Что нужно сделать?

Удаление повторяющихся строк
Раздел «Текст и учёба»
Какие строки считать одинаковыми?

Текст остаётся в этой вкладке. Первая строка сохраняется в исходном виде; настройки влияют только на сравнение.

Мастер Удобника объясняет удаление повторяющихся строк
Удалено: 2 строкРезультат готов

7исходных2повторов0пустых=5осталось

До · 7 строк

Москва
Санкт-Петербург
москва
Казань
Санкт-Петербург

Казань

После · 5 строк

Москва
Санкт-Петербург
москва
Казань
Исходных строк7
Осталось строк5
Удалено повторов2
Удалено пустых0

Как удалены повторяющиеся строки

1. Разделяем исходник на строки

LF, CRLF, CR, Unicode Line Separator и Paragraph Separator считаются границами. В готовом тексте они записываются единообразно через LF.

7строк найдено; заменено окончаний не-LF: 0

2. Строим ключ сравнения

регистр различается; краевые пробелы учитываются. Этот ключ нужен только для поиска совпадения: содержимое первой строки не переписывается.

регистр различается; краевые пробелы учитываются

3. Идём строго сверху вниз

Строки проверены сверху вниз. Для каждой непустой строки построен ключ сравнения (регистр различается; краевые пробелы учитываются); первая запись сохранена, а последующие совпадения помечены для удаления.

4разных непустых строк встретилось

4. Отдельно применяем правило пустых строк

все пустые строки сохранены. Пустой считается и строка, состоящая только из Unicode-пробелов.

11пустые строки до и после

5. Показываем каждое удаление

В строке журнала указано, что удалено и где находится сохранённый первый экземпляр.

Удалена строкаСодержимоеПричинаСохранена строка
5Санкт-Петербургповтор№ 2
7Казаньповтор№ 4

6. Собираем результат без сортировки

Сохранённые строки остаются в исходном порядке. У первой строки сохраняются регистр, пробелы и написание, даже если при сравнении эти признаки игнорировались.

Первая запись остаётсяпоследующие совпадения удаляются

7. Проверяем итог двумя равенствами

7 = 5 + 2 — исходные строки равны сохранённым и удалённым
2 = 2 + 0 — все удаления объяснены
1 = 1 + 0 — пустые строки учтены
Порядок 5 сохранённых строк совпадает с их порядком в исходнике
72 = 5каждое удаление присутствует в журнале
Порядок сохранёнКаждое удаление показаноТекст остаётся в браузере

Как сервис решает, что две строки одинаковы

Слово «дубликат» неоднозначно: кому-то важен регистр, кому-то — случайные пробелы из таблицы. Поэтому Удобник ничего не угадывает. Три правила видны перед запуском, а первая найденная строка всегда остаётся в исходном виде.

Безопасное правило по умолчанию — точное совпадение

Регистр, внутренние и краевые пробелы участвуют в сравнении. Значит, `Москва`, `москва` и ` Москва ` — три разные строки. Удаляется только следующая запись, совпавшая полностью.

первая остаётся:Москваэто другая:москваэто тоже другая:·Москва·

Регистронезависимое сравнение не переписывает текст

Если отключить различие регистра, ключ сравнения строится через локализованное понижение регистра `ru-RU`. Но в результат попадает первая исходная запись, а не автоматически исправленная копия.

ЩУКА · щука · Щука → ЩУКА

Пробелы по краям можно игнорировать отдельно

Настройка использует `trim()` только для ключа сравнения. Внутренние пробелы не сжимаются, а первая сохранённая строка не обрезается.

Первая строкаСледующая строкаБез настройкиС настройкой
·товартовар·разныедубликат
красный··чайкрасный·чайразныеразные

Пустые строки имеют собственное правило

Пустой считается строка без знаков или строка только из Unicode-пробелов. По умолчанию такие строки сохраняются все — абзацы не исчезнут случайно. Если снять переключатель, удаляются все пустые строки, и каждая появляется в журнале с причиной «пустая по выбранному правилу».

Порядок не меняется

Сервис идёт сверху вниз. Первое появление значения записывается в набор уже встреченных ключей. Следующее совпадение пропускается, но остальные строки не сортируются и не переставляются.

A · C · A · B · C → A · C · B

Пять вариантов перевода строки распознаются одинаково

LF, CR, последовательность CRLF, Unicode Line Separator и Paragraph Separator становятся границами. В результате используется LF. Это не меняет содержимое самих строк, но делает копирование между Windows, macOS и браузером предсказуемым.

ЗаписьНазваниеКак учитывается
LFLine Feedодна граница
CRLFCarriage Return + Line Feedодна граница
CRCarriage Returnодна граница
LS / PSUnicode-разделителипо одной границе

Unicode не нормализуется скрытно

Внешне похожий знак может быть записан одной кодовой точкой или буквой с отдельным комбинируемым знаком. Инструмент не выполняет NFC/NFD-нормализацию: это могло бы склеить строки без явного согласия пользователя.

Почему действует ограничение

Вкладка принимает до 100 000 видимых символов, 300 000 кодовых единиц и 10 000 строк. Лимит не связан с отправкой данных: он защищает слабый телефон от слишком большого журнала удалений. В таблице сначала показываются 80 действий, остальные открываются порциями по кнопке.

Приватность исходника и журнала

У инструмента нет server API. Исходник, результат и содержимое удалённых строк не записываются в URL или браузерное хранилище и не передаются аналитике. Классы `ym-disable-keys`, `ym-disable-submit` и `ym-hide-content` закрывают чувствительные блоки от Вебвизора.

Методика и первичные источники

Частые вопросы

Какая строка остаётся, если есть повторы?

Всегда остаётся первое вхождение сверху. Все последующие совпадения удаляются, а порядок остальных строк не меняется.

Москва и москва считаются одинаковыми?

По умолчанию нет, потому что включено различие регистра. Если снять переключатель, сравнение станет регистронезависимым, но написание первой сохранённой строки не изменится.

Что происходит с пробелами в начале и конце строки?

По умолчанию они участвуют в сравнении. Отдельная настройка позволяет не учитывать их только при поиске дубля. Первая строка всё равно сохраняется с исходными пробелами.

Удаляются ли пустые строки?

По умолчанию все пустые и пробельные строки сохраняются. Если снять настройку «Сохранять пустые строки», они будут удалены явно и попадут в журнал с отдельной причиной.

Сортирует ли сервис уникальные строки?

Нет. Инструмент только удаляет последующие совпадения. Первая запись каждого значения остаётся на своём месте.

Что происходит с окончаниями строк Windows и macOS?

CRLF, CR, LF и два Unicode-разделителя распознаются как границы строк. Готовый текст собирается с LF, а число заменённых окончаний показывается в решении.

Склеиваются ли визуально одинаковые Unicode-записи?

Нет. Сервис не выполняет скрытую NFC/NFD-нормализацию. Кодово разные записи остаются разными, если не совпали после явно выбранных правил регистра и краевых пробелов.

Чем это отличается от сравнения двух списков?

Здесь очищается один список и получается готовый текст без повторов. Калькулятор сравнения двух списков отвечает на другую задачу: общие и отличающиеся элементы двух наборов.

Передаётся ли список на сервер?

Нет. Движок выполняется в текущей вкладке, не имеет server API и не записывает текст в URL, localStorage или аналитику. Поле и производный результат скрыты от Вебвизора.