Книга: Описание языка PascalABC.NET
Строковый тип
Разделы на этой странице:
Строковый тип
Строки имеют тип 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 не изменится. Аналогично при передаче строки по значению в подпрограмму создается копия строки, т.е. обеспечивается поведение, характерное для 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 |
Возвращает инверсию строки |
|
Выводит буквы строки, разделенные пробелом |
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 |
- Обзор типов
- Список типов .NET
- Размерные и ссылочные типы
- Целые типы
- Вещественные типы
- Логический тип
- Символьный тип
- Перечислимый и диапазонный типы
- Строковый тип
- Массивы
- Статические массивы
- Динамические массивы
- Указатели
- Последовательности
- Записи
- Множества
- Процедурный тип
- Файловые типы
- Эквивалентность и совместимость типов
- Отображение на типы .NET
- Список типов .NET
- Оператор получения типа typeof
- Строковый тип (string)
- Типы данных
- Типы данных для работы с датой и временем
- Большие целые типы
- Типы страниц и их использование
- 6.2. Типичные ошибки при проведении программ продвижения и варианты их устранения
- Тип данных BIGINT
- Использование CAST() с типами дата
- Новый тип данных: BOOLEAN
- 1.2.3. Константы, переменные и типы