- Строки (Руководство по программированию на C#)
- Сравнение строки и System.String
- Объявление и инициализация строк
- Неизменность строковых объектов
- Регулярные и буквальные строковые литералы
- Escape-последовательности строк
- Строки формата
- Интерполяция строк
- Составное форматирование
- Подстроки
- Доступ к отдельным символам
- Строки NULL и пустые строки
- Использование класса StringBuilder для быстрого создания строк
- Строки, методы расширения и LINQ
- Работа со строками
- Строки
- Поиск элемента в строке
- Работа со строками
- Строки
- Поиск элемента в строке
Строки (Руководство по программированию на C#)
Строка — это объект типа String, значением которого является текст. Внутри программы текст хранится в виде упорядоченной коллекции объектов Char только для чтения. В конце строки C# нет нуль-символов. Поэтому строка C# может содержать любое число внедренных нуль-символов (‘\0’). Свойство Length строки соответствует числу содержащихся в ней объектов Char , но не числу символов Юникода. Для доступа к отдельным кодовым точкам Юникода в строке используйте объект StringInfo.
Сравнение строки и System.String
В C# ключевое слово string является псевдонимом для String. Таким образом, String и string являются эквивалентами. Однако рекомендуется использовать предоставленный псевдоним string , так как он работает даже без using System; . Класс String предоставляет множество методов для безопасного создания, обработки и сравнения строк. Кроме того, язык C# перегружает некоторые операторы для упрощения типичных операций со строками. Дополнительные сведения о ключевых словах см. в статье, посвященной строкам. Дополнительные сведения о типе и его методах см. здесь: String.
Объявление и инициализация строк
Вы можете объявлять и инициализировать строки различными способами, как показано в следующем примере:
Обратите внимание, что вы не используете оператор new для создания объекта строки, за исключением случаев инициализации строки с помощью массива символов.
Инициализируйте строку с константным значением Empty для создания нового объекта String, строка которого имеет нулевую длину. Представлением строкового литерала строки с нулевой длиной является «». Если вы инициализируете строки со значением Empty вместо NULL, вы снизите вероятность появления исключения NullReferenceException. Используйте статический метод IsNullOrEmpty(String), чтобы проверить значение строки, прежде чем пытаться получить к ней доступ.
Неизменность строковых объектов
Строковые объекты являются неизменяемыми: их нельзя изменить после создания. Может показаться, что все методы String и операторы C# изменяют строку, но в действительности они возвращают результаты в новый строковый объект. Когда содержимое s1 и s2 объединяется для формирования одной строки, две исходные строки не изменяются, как показано в следующем примере. Оператор += создает новую строку, которая содержит объединенное содержимое. Этот новый объект присваивается переменной s1 , а исходный объект, который был присвоен s1 , освобождается для сборки мусора, так как ни одна переменная не ссылается на него.
Так как «изменение» строки на самом деле является созданием новой строки, создавать ссылки на строки следует с осторожностью. Если вы создадите ссылку на строку, а затем «измените» исходную строку, ссылка будет по-прежнему указывать на исходный объект, а не на новый объект, который был создан при изменении строки. Это поведение проиллюстрировано в следующем коде:
Сведения о создании новых строк, основанных на таких изменениях, как операции поиска и замены исходной строки, см. в инструкциях по изменению содержимого строки.
Регулярные и буквальные строковые литералы
Используйте регулярные строковые литералы, когда вам нужно внедрить escape-символы, доступные в C#, как показано в следующем примере:
Буквальные строковые литералы используются для удобства и читабельности, если текст строки содержит символы обратной косой черты, например в путях к файлам. Так как буквальные строки сохраняют символы новой строки как часть текста строки, их можно использовать для инициализации многострочных строк. Используйте двойные кавычки, чтобы вставить кавычки в буквальной строке. В следующем примере показаны наиболее часто используемым буквальные строки:
Escape-последовательности строк
Escape-последовательность | Имя символа | Кодировка Юникод |
---|---|---|
\’ | Одинарная кавычка | 0x0027 |
\» | Двойная кавычка | 0x0022 |
\\ | Обратная косая черта | 0x005C |
\0 | Null | 0x0000 |
\a | Предупреждение | 0x0007 |
\b | Backspace | 0x0008 |
\f | Перевод страницы | 0x000C |
\n | Новая строка | 0x000A |
\r | Возврат каретки | 0x000D |
\t | Горизонтальная табуляция | 0x0009 |
\v | Вертикальная табуляция | 0x000B |
\u | Escape-последовательность Юникода (UTF-16) | \uHHHH (диапазон: 0000–FFFF; пример: \u00E7 = «ç») |
\U | Escape-последовательность Юникода (UTF-32) | \U00HHHHHH (диапазон: 000000–10FFFF; пример: \U0001F47D = «👽») |
\x | Escape-последовательность Юникода аналогична «\u», она отличается только длиной переменной | \xH[H][H][H] (диапазон: 0–FFFF; пример: \x00E7 или \x0E7 или \xE7 = «ç») |
Если вы используете escape-последовательность \x с менее чем четырьмя шестнадцатеричными цифрами, то когда непосредственно следующие за ней символы также являются допустимыми шестнадцатеричными цифрами (т. е. 0–9, A–F и a–f), они будут интерпретированы как часть этой escape-последовательности. Например, \xA1 дает результат «¡», являющийся кодовой точкой U+00A1. Однако если следующий символ — «A» или «a», тогда escape-последовательность будет интерпретироваться как \xA1A и даст результат «ਚ», являющийся кодовой точкой U+0A1A. В таких случаях, чтобы избежать некорректной интерпретации, указывайте все четыре шестнадцатеричных знака (например, \x00A1 ).
Во время компиляции буквальные строки преобразуются в обычные строки с теми же escape-последовательностями. Поэтому, если вы просматриваете буквальную строку в окне контрольных значений отладчика, вы увидите escape-символы, добавленные компилятором, а не буквальную версию из исходного кода. Например, буквальная строка @»C:\files.txt» будет отображаться в окне контрольных значений как «C:\\files.txt».
Строки формата
Строка формата — это строка, содержимое которой можно определить динамически во время выполнения. Строки формата создаются путем внедрения интерполированных выражений или заполнителей внутри фигурных скобок в строке. Весь код внутри фигурных скобок ( <. >) будет преобразован в значение и выходные данные как отформатированная строка во время выполнения. Существует два способа создания строк формата: интерполяция строк и составное форматирование.
Интерполяция строк
В C# 6.0 и более поздних версий интерполированные строки определяются по специальному символу $ . Они включают интерполированные выражения в фигурных скобках. См. дополнительные сведения в интерактивном руководстве по интерполяции строк в C#.
Используйте интерполяцию для повышения удобства чтения и обслуживаемости кода. Интерполяция строк позволяет достичь тех же результатов, что и использование метода String.Format , но более простым и понятным способом.
Начиная с C# 10, можно использовать интерполяцию строк для инициализации константной строки, если все выражения, используемые для заполнителей, также являются константными строками.
Составное форматирование
String.Format использует заполнители в фигурных скобках, чтобы создать строку формата. В этом примере результат аналогичен выходным данным, получаемым с помощью метода интерполяции строк, описанного выше.
Подстроки
Подстрока — это последовательность символов, содержащихся в строке. Используйте метод Substring, чтобы создать новую строку из части исходной строки. Одно вхождение подстроки или несколько можно найти с помощью метода IndexOf. Используйте метод Replace, чтобы заменить все вхождения указанной подстроки новой строкой. Как и метод Substring, метод Replace фактически возвращает новую строку и не изменяет исходную строку. См. дополнительные сведения о поиске строк и изменении содержимого строк.
Доступ к отдельным символам
Используя нотацию массива со значением индекса, можно получить доступ только для чтения к отдельным символам, как показано в следующем примере:
Если вам необходимо изменить отдельные символы в строке и функций методов String вам недостаточно, используйте объект StringBuilder, чтобы изменить отдельные символы «на месте», а затем создайте новую строку для сохранения результатов с помощью методов StringBuilder. В следующем примере предположим, что необходимо определенным образом изменить исходную строку, а затем сохранить результаты для дальнейшего использования:
Строки NULL и пустые строки
Пустая строка — это экземпляр объекта System.String, который содержит нуль символов. Пустые строки часто используются в различных сценариях программирования для представления пустого текстового поля. Вы можете вызывать методы для пустых строк, так как они являются допустимыми объектами System.String. Пустые строки инициализируются следующим образом:
В отличие от пустых строк строка NULL не ссылается на экземпляр объекта System.String, поэтому любая попытка вызвать метод для строки NULL приводит к исключению NullReferenceException. Но вы можете использовать строки NULL в операциях объединения и сравнения с другими строками. В следующих примерах показаны случаи, в которых ссылка на строку NULL вызывает и не вызывает исключение:
Использование класса StringBuilder для быстрого создания строк
Операции со строками в .NET хорошо оптимизированы, и в большинстве случаев они не снижают производительность. Но в некоторых сценариях, например в сплошных циклах, которые выполняются сотни и тысячи раз, операции со строками могут повлиять на производительность. Класс StringBuilder создает строковый буфер, который ускоряет работу, если программа выполняет много операций над строками. Строка StringBuilder также позволяет заново присваивать отдельные символы, что не поддерживает встроенный строковый тип данных. Например, этот код изменяет содержимое строки без создания новой строки:
В этом примере объект StringBuilder используется для создания строки из набора числовых типов:
Строки, методы расширения и LINQ
Так как тип String использует IEnumerable , вы можете применять методы расширения, определенные для строк в классе Enumerable. Чтобы избежать визуального загромождения, эти методы исключены из IntelliSense для типа String, но все равно доступны. Можно также использовать выражения запроса LINQ в строках. Дополнительные сведения см. в документации по LINQ и строкам.
Источник
Работа со строками
Строки
Вероятно, читатели примерно представляют, что такое тип данных » строка » и как создать переменную такого типа. В одной из первых лекций мы приводили три способа задания строк : с помощью одинарных кавычек, двойных кавычек и с помощью heredoc –синтаксиса. Отмечали мы и основные различия между этими способами. В основном они касаются обработки переменных и управляющих последовательностей внутри строки .
Уже не раз, начиная с самой первой лекции, мы использовали функцию echo . На самом деле, echo – не функция , а языковая конструкция, поэтому использовать при ее вызове круглые скобки не обязательно. Echo позволяет выводить на экран строки , переданные ей в качестве параметров. Параметров у echo может быть сколько угодно. Их разделяют запятыми или объединяют с помощью оператора конкатенации и никогда не заключают в круглые скобки.
Существует сокращенный синтаксис для команды echo :
Здесь параметр строка_для_вывода содержит строку , заданную любым из известных способов, которая должна быть выведена на экран.
Например, такой скрипт выведет на экран красным цветом «Меня зовут Вася»:
Кроме языковой конструкции echo существует ряд функций для вывода строк . Это в первую очередь функция print и ее разновидности printf , sprintf и т.п.
Функция print позволяет выводить на экран только одну строку и, как и echo , не может быть вызвана с помощью переменных функций, поскольку является языковой конструкцией.
Функция print_r не относится к строковым функциям , как можно было бы подумать. Она отображает информацию о переменной в форме, понятной пользователю.
Функции sprintf и printf обрабатывают переданную им строку в соответствии с заданным форматом. Но о них мы говорить не будем. А поговорим о том, как можно осуществлять поиск в тексте, представленном в виде строки .
Поиск элемента в строке
Для того чтобы определить, входит ли данная подстрока в состав строки , используется функция strpos() . Синтаксис strpos() такой:
Она возвращает позицию появления искомой строки в исходной строке или возвращает логическое false , если вхождение не найдено. Дополнительный аргумент позволяет задавать символ, начиная с которого будет производиться поиск . Кроме логического false эта функция может возвращать и другие значения, которые приводятся к false (например, 0 или «»). Поэтому для того, чтобы проверить, найдена ли искомая строка , рекомендуют использовать оператор эквивалентности » === «.
Если значение параметра строка_для_поиска не является строкой , то оно преобразуется к целому типу и рассматривается как ASCII-код символа. Чтобы получить ASCII-код любого символа в PHP , можно воспользоваться функцией ord(«символ»)
Например, если мы напишем $pos = strpos ($str,228); то интерпретатор будет считать, что мы ищем символ » д «. Если добавить эту строчку в приведенный выше пример и вывести результат, то получим сообщение, что искомая строка найдена в позиции 1 .
Функция , обратная по смыслу ord , – это chr (код символа) . Она по ASCII-коду выводит символ, соответствующий этому коду .
С помощью функции strpos можно найти номер только первого появления строки в исходной строке . Естественно, есть функции, которые позволяют вычислить номер последнего появления строки в исходной строке . Это функция strrpos() . Ее синтаксис таков:
В отличие от strpos() эта функция позволяет найти позицию последнего появления в строке указанного символа.
Бывают ситуации, когда знать позицию, где находится искомая строка , необязательно, а нужно просто получить все символы, которые расположены после вхождения этой строки . Можно, конечно, воспользоваться и приведенными выше функциями strpos() и strrpos() , но можно сделать и проще – выделить подстроку с помощью предназначенных именно для этого функций.
Источник
Работа со строками
Строки
Вероятно, читатели примерно представляют, что такое тип данных » строка » и как создать переменную такого типа. В одной из первых лекций мы приводили три способа задания строк : с помощью одинарных кавычек, двойных кавычек и с помощью heredoc –синтаксиса. Отмечали мы и основные различия между этими способами. В основном они касаются обработки переменных и управляющих последовательностей внутри строки .
Уже не раз, начиная с самой первой лекции, мы использовали функцию echo . На самом деле, echo – не функция , а языковая конструкция, поэтому использовать при ее вызове круглые скобки не обязательно. Echo позволяет выводить на экран строки , переданные ей в качестве параметров. Параметров у echo может быть сколько угодно. Их разделяют запятыми или объединяют с помощью оператора конкатенации и никогда не заключают в круглые скобки.
Существует сокращенный синтаксис для команды echo :
Здесь параметр строка_для_вывода содержит строку , заданную любым из известных способов, которая должна быть выведена на экран.
Например, такой скрипт выведет на экран красным цветом «Меня зовут Вася»:
Кроме языковой конструкции echo существует ряд функций для вывода строк . Это в первую очередь функция print и ее разновидности printf , sprintf и т.п.
Функция print позволяет выводить на экран только одну строку и, как и echo , не может быть вызвана с помощью переменных функций, поскольку является языковой конструкцией.
Функция print_r не относится к строковым функциям , как можно было бы подумать. Она отображает информацию о переменной в форме, понятной пользователю.
Функции sprintf и printf обрабатывают переданную им строку в соответствии с заданным форматом. Но о них мы говорить не будем. А поговорим о том, как можно осуществлять поиск в тексте, представленном в виде строки .
Поиск элемента в строке
Для того чтобы определить, входит ли данная подстрока в состав строки , используется функция strpos() . Синтаксис strpos() такой:
Она возвращает позицию появления искомой строки в исходной строке или возвращает логическое false , если вхождение не найдено. Дополнительный аргумент позволяет задавать символ, начиная с которого будет производиться поиск . Кроме логического false эта функция может возвращать и другие значения, которые приводятся к false (например, 0 или «»). Поэтому для того, чтобы проверить, найдена ли искомая строка , рекомендуют использовать оператор эквивалентности » === «.
Если значение параметра строка_для_поиска не является строкой , то оно преобразуется к целому типу и рассматривается как ASCII-код символа. Чтобы получить ASCII-код любого символа в PHP , можно воспользоваться функцией ord(«символ»)
Например, если мы напишем $pos = strpos ($str,228); то интерпретатор будет считать, что мы ищем символ » д «. Если добавить эту строчку в приведенный выше пример и вывести результат, то получим сообщение, что искомая строка найдена в позиции 1 .
Функция , обратная по смыслу ord , – это chr (код символа) . Она по ASCII-коду выводит символ, соответствующий этому коду .
С помощью функции strpos можно найти номер только первого появления строки в исходной строке . Естественно, есть функции, которые позволяют вычислить номер последнего появления строки в исходной строке . Это функция strrpos() . Ее синтаксис таков:
В отличие от strpos() эта функция позволяет найти позицию последнего появления в строке указанного символа.
Бывают ситуации, когда знать позицию, где находится искомая строка , необязательно, а нужно просто получить все символы, которые расположены после вхождения этой строки . Можно, конечно, воспользоваться и приведенными выше функциями strpos() и strrpos() , но можно сделать и проще – выделить подстроку с помощью предназначенных именно для этого функций.
Источник