Процедура Delete позволяет удалить из строки указанное количество символов, начиная с указанного индекса в строке. При этом удаление происходит со сдвигом последующих символов на длину удаляемой подстроки влево.
1
2
3
4
5
6
|
var
a:string;
begin
a := '123123abc123123';
Delete(a, 7, 3); // a = "123123123123"
end;
|
Копирование подстроки из строки
Функция Copy позволяет получить дубликат подстроки определенной длинны, начинающейся с символа с указанным индексом.
1
2
3
4
5
6
|
var
a, b:string;
begin
a := 'cybern.ru is the best website about programming';
b := Copy(a, 1, 9); // b = "cybern.ru"
end;
|
Замена одной подстроки на другую подстроку внутри строки
Для замены одной подстроки на другую подстроку внутри исходной строки используют функцию StringReplace. Нужно признать, что функция довольно удобная и обойти стороной ее никак нельзя. Довольно полезной возможностью этой функции является то, что она может заменять сразу несколько вхождений одной подстроки на другую, а также может игнорировать регистр. Последние две возможности являются опциональными (необязательными) и при необходимости их можно не использовать. Рассмотрим пример:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
var
a, b, c: string;
begin
a := 'aBc Abc abC 123 cba cba cba'; // исходная строка
b := 'abc'; // заменяемая подстрока
c := 'test'; // заменяющая подстрока
// Далее параметр [rfReplaceAll,rfIgnoreCase] обозначают как раз те самые опции в работе функции.
// Называются такие параметры "флагами".
// Такие флаги обязательно нужно указывать внутри квадратных скобок.
// Сами флаги перечисляются через запятую.
// Все флаги, находящиеся внутри квадратных скобок являются обычным параметром функции.
// Флаг rfReplaceAll говорит функции, что нужно будет производить замену всех вхождений.
// Если этот флаг убрать (тогда выглядеть флаги будут так "[rfIgnoreCase]"),
// то заменится только первое вхождение в строке a.
// Флаг rfIgnoreCase указывает, что при поиске вхождений строк b регистр учитываться не будет.
// Если все флаги вам не нужны, то это НЕ значит, что параметр вовсе не нужно указывать.
// В таком случае укажите в качестве флагов "[]".
a := StringReplace(a,b,c, [rfReplaceAll,rfIgnoreCase]);
// В результате строка a будет содержать "test test test 123 cba cba cba"
end;
|
Если вы не помните какие флаги есть у функции, то лучше укажите сначала «[«, а затем нажмите «Ctrl+Пробел», после чего откроется список с подсказками, в котором будут перечислены все возможные флаги.
Следующий урок
|