var s2 := 'Hello';
var s1 := s2;
s1[2] := 'a';
строка s2 не изменится. Аналогично при передаче строки по значению в подпрограмму создается копия строки, т.е. обеспечивается поведение, характерное для Delphi Object Pascal, а не для .NET.
Однако, строке можно присвоить nil, что необходимо для работы с NET-кодом.
Кроме того, в PascalABC.NET реализованы размерные строки. Для их описания используется тип string[n], где n - константа целого типа, указывающая длину строки. Размерные строки, в отличие от обычных, можно использовать как компоненты типизированных файлов. Для совместимости с Delphi Object Pascal в стандартном модуле описан тип shortstring=string[255].
Стандартные подпрограммы работы со строками.
Члены класса string.
Методы типа string
Тип string в PascalABC.NET является классом и содержит ряд свойств, статических и экземплярных методов, а также методов расширения.
В методах класса string считается, что строки индексируются с нуля. Кроме того, ни один метод не меняет строку, т.к. строки в .NET являются неизменяемыми.
Свойства класса String
Свойство
Описание
s[i]
Индексное свойство. Возвращает или позволяет изменить i-тый символ строки s. Строки в PascalABC.NET индексируются от 1.
Length: integer
Возвращает длину строки
Статические методы класса String
Метод
Описание
String.Compare(s1,s2: string): integer
Сравнивает строки s1 и s2. Возвращает число <0 если s1<s2, =0 если s1=s2 и >0 если s1>s2
String.Compare(s1,s2: string; ignorecase: boolean): integer
То же. Если ignorecase=True, то строки сравниваются без учета регистра букв
String.Format(fmtstr: string, params arr: array of object): string;
Форматирует параметры arr согласно форматной строке fmtstr
String.Join(ss: array of string; delim: string): string
Возвращает строку, полученную слиянием строк ss с использованием delim в качестве разделителя
Экземплярные методы класса String
Отметим, что все экземплярные методы не меняют строку, как это может показаться на первый взгляд, а при необходимости возвращают измененную строку. Кроме того, считается, что символы в сроке индексируются с нуля.
Метод
Описание
Contains(s: string): boolean
Возвращает True, если текущая строка содержит s, и False в противном случае
EndsWith(s: string): boolean
Возвращает True, если текущая строка заканчивается на s, и False в противном случае
IndexOf(s: string): integer
Возвращает индекс первого вхождения подстроки s в текущую строку или -1 если подстрока не найдена
IndexOf(s: string; start,count: integer): integer
Возвращает индекс первого вхождения подстроки s в текущую строку или -1 если подстрока не найдена. Поиск начинается с символа с номером start и распространяется на следующие count символов
IndexOfAny(cc: array of char): integer
Возвращает индекс первого вхождения любого символа из массива сс
Insert(from: integer; s: string): string
Возвращает строку, полученную из исходной строки вставкой подстроки s в позицию from
LastIndexOf(s: string): integer
Возвращает индекс последнего вхождения подстроки s в текущую строку
LastIndexOf(s: string; start,count: integer): integer
Возвращает индекс последнего вхождения подстроки s в текущую строку или -1 если подстрока не найдена. Поиск начинается с символа с номером start и распространяется на следующие count символов
LastIndexOfAny(a: array of char): integer
Возвращает индекс последнего вхождения любого символа из массива сс
PadLeft(n: integer): string
Возвращает строку, полученную из исходной строки выравниванием по правому краю с заполнением пробелами слева до длины n
PadRight(n: integer): string
Возвращает строку, полученную из исходной строки выравниванием по левому краю с заполнением пробелами справа до длины n
Remove(from,len: integer): string
Возвращает строку, полученную из исходной строки удалением len симолов с позиции from
Replace(s1,s2: string): string
Возвращает строку, полученную из исходной строки заменой всех вхождений подстроки s1 на строку s2
Split(params delim: array of char): array of string
Возвращает массив строк, полученный расщеплением исходной строки на слова, при этом в качестве разделителей используется любой из символов delim (по умолчанию - пробел)
StartsWith(s: string): boolean
Возвращает True, если текущая строка начинается на s, и False в противном случае
Substring(from,len: integer): string
Возвращает подстроку исходной строки с позиции from длины len
ToCharArray: array of char
Возвращает динамический массив символов исходной строки
ToLower: string
Возвращает строку, приведенную к нижнему регистру
ToUpper: string
Возвращает строку, приведенную к верхнему регистру
Trim: string
Возвращает строку, полученную из исходной удалением лидирующих и завершающих пробелов
TrimEnd(params cc: array of char): string
Возвращает строку, полученную из исходной удалением завершающих символов из массива cc
TrimStart(params cc: array of char): string
Возвращает строку, полученную из исходной удалением лидирующих символов из массива cc
Методы расширения класса String
Некоторые методы расширения - стандартные для .NET, некоторые реализованы только в PascalABC.NET.
Метод
Описание
Inverse: string
Возвращает инверсию строки
Print
Выводит буквы строки, разделенные пробелом
Println
Выводит буквы строки, разделенные пробелом, и осуществляет переход на новую строку
ReadInteger(var from: integer): integer
Считывает из строки целое число с позиции from и возвращает его. Позиция from при этом увеличивается на считанный элемент
ReadReal(var from: integer): real
Считывает из строки вещественное число с позиции from и возвращает его. Позиция from при этом увеличивается на считанный элемент
ReadWord(var from: integer): string
Считывает из строки слово до пробела или до конца строки с позиции from и возвращает его. Позиция from при этом увеличивается на считанный элемент
ToInteger: integer
Преобразует строку к целому и возвращает его. Если это невозможно, генерируется исключение
ToIntegers: array of integer
В строке должны храниться целые, разделенные пробелами. Возвращается массив целых. Если это невозможно, генерируется исключение
ToReal: real
Преобразует строку к вещественному и возвращает его. Если это невозможно, генерируется исключение
ToReals: array of real
В строке должны храниться вещественные, разделенные пробелами. Возвращается массив вещественных. Если это невозможно, генерируется исключение
ToWords(params delim: array of char): array of string
Возвращает массив строк, полученный расщеплением исходной строки на слова, при этом в качестве разделителей используется любой из символов delim (по умолчанию - пробел). В отличие от s.Split не включает в итоговый массив пустые строки. В частности, это означает, что слова могут быть разделены несколькими разделителями delim
Массив представляет собой набор элементов одного типа, каждый из которых имеет свой номер, называемый индексом (индексов может быть несколько, тогда массив называется многомерным).
Массивы в PascalABC.NET делятся на статические и динамические.
При выходе за границы изменения индекса в PascalABC.NET всегда генерируется исключение.
Описание статического массива
Статические массивы в отличие от динамических задают свой размер непосредственно в типе. Память под такие массивы выделяется сразу при описании.
Тип статического массива конструируется следующим образом:
array [тип индекса1, ..., тип индексаN] of базовый тип
Тип индекса должен быть порядковым. Обычно тип индекса является диапазонным и представляется в виде a..b, где a и b - константные выражения целого, символьного или перечислимого типа. Например:
type
MyEnum = (w1,w2,w3,w4,w5);
Arr = array [1..10] of integer;
var
a1,a2: Arr;
b: array ['a'..'z',w2..w4] of string;
c: array [1..3] of array [1..4] of real;