Строки имеют тип string
, состоят из набора последовательно расположенных символов
char
и используются для представления текста.
Строки могут иметь произвольную длину. К символам в строке можно обращаться, используя индекс:
s[i]
обозначает i
-тый
символ в строке, нумерация начинается с единицы. Если индекс i
выходит за пределы
длины строки, то генерируется исключение.
Над строками определены операции сравнения: < > <= >= = <>. Сравнение строк на неравенство осуществляется лексикографически: s1 < s2 если для первого несовпадающего символа с номером i s1[i]<s2[i] или все символы строк совпадают, но s1 короче s2.
Операция +
для строк означает
конкатенацию (слияние) строк. Например: 'Петя'+'Маша'
= 'ПетяМаша'
.
Расширенный оператор присваивания +=
для строк
добавляет в конец строки - левого операнда строку - правый операнд. Например:
var s: string := 'Петя';
s += 'Маша'; // s = 'ПетяМаша'
Строка может складываться с числом, при этом число предварительно преобразуется к строковому представлению:
s := 'Ширина: ' + 15; // s = 'Ширина: 15'
s :=
20.5 + ''; // s = '20.5'
s += 1; // s = '20.51'
Над строками и целыми определена операция *: s*n и n*s означает строку, образованную из строки s, повторенной n раз:
s := '*'*10; // s = '**********'
s := 5*'ab' // s = 'ababababab'
s := 'd'; s *= 3; // s =
'ddd'
Над строками определена также операция взятия среза.
Строки реализуются типом System.String
платформы .NET и представляют собой ссылочный тип.
Таким образом, все операции над строками унаследованы от типа
System.String
. Однако, в отличие от .NET -
строк, строки в PascalABC.NET изменяемы.
Например, можно изменить s[i]
(в .NET
нельзя). Более того, строки string
в PascalABC.NET ведут себя как
размерные: после
var s2 := 'Hello';
var s1 := s2;
s1[2] := 'a';
строка s2
не изменится.
Здесь происходит так называемое копирование при записи (Copy On Write) - при
изменении символа строки создаётся её копия, в результате s1 и s2 начинают
ссылаться на разные участки памяти.
По умолчанию строки инициализируются пустой строкой (в .NET -
значением nil). Однако, строке можно присвоить nil
,
что необходимо для работы с NET-кодом.
Кроме того, для совместимости с Delphi Object Pascal в PascalABC.NET
реализованы короткие строки вида
string[n]
.