Работа со строчками в Delphi 10
Для работы со строчками в крайних версиях Delphi разрабам доступно огромное количество функций, кроме которых ещё есть ассистенты для работы со строчками, такие как TStringHelper, TStringBuilder и TRegEx. Во всём этом многообразии бывает трудно отыскать подходящую функцию. Я попробовал разобраться, что есть в Delphi 10.1 Berlin для работы со строчками и как сиим всем воспользоваться.
Итак, до этого чем начнём разбираться с функциями, замечу, что начиная с Delphi XE3, возник ассистент TStringHelper, и сейчас работать со строчками можно как с записями. Т.е., если вы обусловили переменную со строчкой (на картинке снизу – это myStr), то вы сможете поставить точку и поглядеть, какие функции доступны. Это весьма комфортно.
К слову подобные ассистенты возникли и для работы с типами Single, Double и Extended: TSingleHelper, TDoubleHelper и TExtendedHelper.
Ну и естественно, кроме ассистента TStringHelper, никуда не делся класс TStringBuilder, который употребляется для работы со строчкой как с массивом, и который является на сто процентов совместимым с .NET классом StringBuilder.
А для работы с текстовыми документами неподменным окажется класс TRegEx, который является обёрткой над библиотекой PCRE, позволяющий употреблять постоянные выражения для поиска, подмены подстрок и расщепления текста на части.
Все приведённые в статье примеры изготовлены при помощи Delphi 10.1 Berlin, потому в остальных версиях Delphi их работа не гарантируется.
Вот главные моменты, которые мы разглядим в статье:
- Инициализация строк
- Изменение регистра
- Конкатенация строк
- Вставка подстроки в строчку
- Удаление части строчки
- Копирование части строчки
- Сопоставление строк
- Поиск подстроки в строке
- Поиск знаков в строке
- Подмена подстроки в строке
- Обрезка пробелов и управляющих знаков
- Сглаживание текста за счёт установки пробелов
Строчки в Delphi
В крайних версиях Delphi тип string, обозначающий строчку, является псевдонимом встроенного типа System.UnicodeString. Т.е. когда вы объявляете переменную str: string, то автоматом вы объявляете переменную типа UnicodeString.
К слову, на платформе Win32 вы сможете употреблять директиву « », которая превратит тип string в ShortString. При помощи этого метода вы сможете употреблять старенькый 16-битный код Delphi либо Turbo Pascal в ваших проектах.
Направьте внимание, что не считая типа UnicodeString и ShortString в Delphi есть и остальные типы строк, такие как AnsiString и WideString, но далее в статье мы будем разглядывать лишь работу со строчками типа string.
Наиболее глубочайшее исследование строк в Delphi вы сможете начать с чтения документации тут.
Инициализация строк
Естественно, начнём мы с инициализации строк. Итак, разглядим объявление переменной с типом string.
В данной строке кода мы объявляем переменную s с типом string, т.е., как было написано выше, по дефлоту с типом UnicodeString. Объявленные переменные с типом UnicodeString, в которые не присвоено значение, постоянно гарантированно содержат строчку нулевой длины. Чтоб сейчас в переменной s была подходящая нам строчка, необходимо просто присвоить переменной другое значение, к примеру:
Это самый обычный и нередко применяемый метод инициализации. Не считая этого есть ряд нужных функций, которые понадобятся для вас для инициализации строк в неких ситуациях (тут и дальше я буду давать полный код проекта консольного Win32 приложения):
Изменение регистра
Для конфигурации регистра строк в Delphi есть функции LowerCase, UpperCase, TStringHelper.ToLower, TStringHelper.ToUpper, TStringHelper.ToLowerInvariant и TStringHelper.ToUpperInvariant. В нижний регистр строчки меняют функции LowerCase, TStringHelper.ToLower и TStringHelper.ToLowerInvariant, другие – в верхний. Направьте внимание, что функции LowerCase и UpperCase не работают с кириллицей. Функции TStringHelper.ToUpperInvariant и TStringHelper.ToLowerInvariant постоянно работают независимо от текущей пользовательской локали. Вот примеры использования функций:
Конкатенация строк
Тут естественно самый обычный вариант – это внедрение оператора +. Но есть и остальные варианты, к примеру, функция Concat. А если для вас необходимо в цикле добавлять в конец одной строчки огромное количество остальных строк, то тут понадобится способ Append класса TStringBuilder. Вот вам наглядный пример использования перечисленных методов:
Во всех четырёх переменных, опосля выполнения нашей программки, будет последующая строчка: «Абвгдеёжзиклмнопрст». Четвёртый метод смотрится наиболее массивным, но у такового метода есть три достоинства. Во-1-х, при большенном количестве конкатенаций этот метод даст выигрыш по времени по сопоставлению с первыми 3-мя методами. Во-2-х, при разработке объекта TStringBuilder вы сходу сможете задать подходящий размер массива для хранения строчки, если он естественно известен. Это тоже даст выигрыш по времени. В-3-х, функция Append воспринимает на вход не только лишь строчки, да и остальные типы, такие как Integer и Single, автоматом преобразуя их в строчку.
3-ий метод комфортно употреблять, если необходимо сложить строчки, находящиеся в массиве либо перечне. К тому же тут первым параметром можно задать строку-разделитель, которая будет вставлена меж строчками, взятыми из массива. Вот вам наглядный пример, в котором формируется строчка со перечнем городов, разделённых запятыми:
В итоге выполнения данной функции получится строчка «Москва, Санкт-Петербург, Севастополь».
Вставка подстроки в строчку
Для того чтоб вставить вовнутрь строчки подстроку вы сможете употреблять функцию Insert либо функцию TStringHelper.Insert. У класса TStringBuilder тоже есть подобная функция. К слову, функция TStringBuilder.Insert, не считая строк умеет вставлять и остальные типы, такие как Integer и Single, автоматом преобразуя их в строчку. Вот вам наглядный пример использования:
Направьте внимание, в процедуре Insert нумерация знаков начинается с 1, а в функциях TStringHelper.Insert и TStringBuilder.Insert – с 0. Все приведённые методы меняют строчку, лежащую в переменной.
Удаление части строчки
Допустим, для вас необходимо удалить из строчки часть знаков. Тут нам посодействуют процедура Delete и функция TStringHelper.Remove. У класса TStringBuilder тоже есть функция Remove. Вот примеры использования:
Во всех трёх методах из строчки «Абвгд» получится строчка «Агд». Направьте внимание, что в процедуре Delete нумерация знаков начинается с 1, а в функциях Remove – с 0.
Также любопытно, что функция TStringHelper.Remove не трогает начальную строчку. Заместо этого она возвращает новейшую строчку с удалёнными знаками. Конкретно потому мы присваиваем итог назад в переменную. Процедура Delete работает по-другому: она меняет начальную строчку.
Кроме приведённых тут вариантов, для удаления части строчки можно употреблять функции подмены подстроки, просто для этого разыскиваемая подстрока заменяется на пустую, к примеру, StringReplace(str1, substr1, »).
Копирование части строчки
Тут идёт речь о том, что часть длиной строчки необходимо скопировать в новейшую строчку либо массив знаков. Для этого в Delphi есть функции LeftStr, RightStr, Copy, TStringHelper.Substring и TStringHelper.CopyTo. А в классе TStringBuilder – лишь функция CopyTo. Есть также функция MidStr в юните System.StrUtils, которая работает аналогично функции Copy, потому в примере её не будет.
1-ые два метода копируют часть строчки слева (функция LeftStr) либо справа (RightStr). Другие четыре метода подступают, как для копирования части строчки слева либо справа, так и из середины.
В методах 3-6 из примера мы получим сроку «вгд» либо массив [‘в’, ‘г’, ‘д’]. Направьте внимание, что в функциях Copy и MidStr нумерация знаков начинается с 1, а во всех других с 0. Начальная строчка либо массив знаков во всех четырёх методах не изменяется.
Сопоставление строк
Естественно, ассоциировать строчки можно при помощи операторов =, <, <=, >, >= и <>. Но не считая этого есть ещё много функций: StrComp, StrIComp, StrLComp, StrLIComp, CompareStr, CompareText, TStringHelper.Compare, TStringHelper.CompareOrdinal, TStringHelper.CompareTo, TStringHelper.CompareText, SameStr, SameText, TStringHelper.Equals и TStringBuilder.Equals. Функции SameText, StrIComp, CompareText, TStringHelper.CompareText и TStringHelper.Compare могут создавать регистронезависимое сопоставление строк, другие функции и операторы — регистрозависимое.
Третьим параметром в функциях CompareText и SameText можно указать, что необходимо употреблять для сопоставления строк пользовательскую локаль. В этом случае вы можете ассоциировать строчки с русскими знаками независимо от регистра, если естественно в ОС употребляется российский язык.
Работа со строчками в JavaScript
Умение работать со строковыми переменными в javascript является неотклонимым условием при написании даже маленьких скриптов. Разглядим базисные операции на обычных примерах.
Объединение
Разглядим главные нюансы, связанные с объединением строк и строковых переменных.
Заместо одинарных кавычек можно употреблять двойные. Не считая этого, кавычки снутри строчки можно экранировать оборотным слешем.
Применяется в JavaScript и ещё один тип кавычек — оборотные. Их внедрение дозволяет располагать переменные прямо снутри строчки.
Ещё один метод объединения — употреблять функцию « concat ».
Тут в переменную « s3 », будет присваиваться значение переменной « s1 », объедененное с пробелом, « s2 » и восклицательным знаком. Принципиально, значение « s1 » не поменяется.
Подсчет знаков
Для подсчета количества знаков используйте способ « length ».
Проверка на тип и пустоту
Как проверить, содержит ли переменная строчку.
Проверка на пустоту:
Поиск в строке
Чтоб найти вхождение слова либо знака в строчку, используйте функцию « indexOf ». Она возвращает позицию отысканной подстроки либо « -1 », если ничего не найдено.
Вероятен поиск по постоянному выражению. Попробуем отыскать в строке число, хотя буквально не знаем, есть оно либо нет.
Переменная « Regex » содержит постоянное выражение, со особым правилом для поиска. В данном примере система « (d+) » обозначает последовательность цифр. В качестве результата ворачивается массив со всеми отысканными элементами. Если убрать директиву « g », то в итог попадет лишь 1-ый отысканный элемент.
Постоянные выражения в js — это отдельная тема. Отчасти сможете ознакомиться с ними из статьи по валидации полей.
Подмены в строке
Обычной метод подмены слова в строке:
Недочет: будет заменено лишь 1-ое отысканное совпадение.
Подмена всех совпадений:
Флаг « g » показывает на то, что постоянное выражение обязано инспектировать все вероятные сравнения. Директива « i » показывает на поиск без учета регистра. Другими словами, слово « World » тоже будет заменено.
Тот же метод применим для подмены года. Постоянное выражение укажем сходу снутри функции.
Работа с подстроками
Разглядим функции для работы с подстроками.
slice(start, [end]) — возвращает знаки, меж определенных позиций.
Если 2-ой параметр не указан, то возвратит всё до конца строчки.
substring(start, [end]) — работает аналогично. Отличие от « slice » в 2 моментах. Если стартовое значение больше конечного, то 1-ая функция возвратит пустую строчку.
Ещё различие в подходе при неправильных параметрах.
Функция « slice() » преобразует отрицательные значения в положительные, отталкиваясь от длины строчки, а « substring() » просто устанавливает их в ноль, потому возвращает пустую строчку.
substr(start, [length]) — возвращает подстроку, начиная с определенной позиции и определенной длины.
Разбиение на массив
Преобразование строчки в массив. В качестве параметра указывается разделитель, в нашем случае это пробел.
Оборотная функция « join ».
В совокупы функции разрешают стремительно преобразовать строчку в массив, произвести с каждым элементом манипуляции и вернуть назад строчку. К примеру, ах так стремительно можно обернуть любой знак строчки в тег span :
В примере употребляется синтаксис ECMAScript 6, может не поддерживаться устаревшими браузерами.