Работа со строчками в 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 и ещё один тип кавычек — оборотные. Их внедрение дозволяет располагать переменные прямо снутри строчки.

Интересно почитать:  Excel максимальное число строк в

Ещё один метод объединения — употреблять функцию « concat ».

Тут в переменную « s3 », будет присваиваться значение переменной « s1 », объедененное с пробелом, « s2 » и восклицательным знаком. Принципиально, значение « s1 » не поменяется.

Подсчет знаков

Для подсчета количества знаков используйте способ « length ».

метод length

Проверка на тип и пустоту

Как проверить, содержит ли переменная строчку.

Проверка на пустоту:

Поиск в строке

Чтоб найти вхождение слова либо знака в строчку, используйте функцию « indexOf ». Она возвращает позицию отысканной подстроки либо « -1 », если ничего не найдено.

Вероятен поиск по постоянному выражению. Попробуем отыскать в строке число, хотя буквально не знаем, есть оно либо нет.

регулярные выражения

Переменная « Regex » содержит постоянное выражение, со особым правилом для поиска. В данном примере система « (d+) » обозначает последовательность цифр. В качестве результата ворачивается массив со всеми отысканными элементами. Если убрать директиву « g », то в итог попадет лишь 1-ый отысканный элемент.

Постоянные выражения в js — это отдельная тема. Отчасти сможете ознакомиться с ними из статьи по валидации полей.

Подмены в строке

replace() js

Обычной метод подмены слова в строке:

Недочет: будет заменено лишь 1-ое отысканное совпадение.

Подмена всех совпадений:

Флаг « g » показывает на то, что постоянное выражение обязано инспектировать все вероятные сравнения. Директива « i » показывает на поиск без учета регистра. Другими словами, слово « World » тоже будет заменено.

Тот же метод применим для подмены года. Постоянное выражение укажем сходу снутри функции.

Работа с подстроками

Разглядим функции для работы с подстроками.

slice(start, [end]) — возвращает знаки, меж определенных позиций.

Если 2-ой параметр не указан, то возвратит всё до конца строчки.

substring(start, [end]) — работает аналогично. Отличие от « slice » в 2 моментах. Если стартовое значение больше конечного, то 1-ая функция возвратит пустую строчку.

Ещё различие в подходе при неправильных параметрах.

substring() и slice()

Функция « slice() » преобразует отрицательные значения в положительные, отталкиваясь от длины строчки, а « substring() » просто устанавливает их в ноль, потому возвращает пустую строчку.

substr(start, [length]) — возвращает подстроку, начиная с определенной позиции и определенной длины.

Разбиение на массив

строку в массив

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

Оборотная функция « join ».

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

В примере употребляется синтаксис ECMAScript 6, может не поддерживаться устаревшими браузерами.

Ссылка на основную публикацию
Adblock
detector