Си шарп работа со строками

Практическое руководство. Выполнение базовых операций со строками в .NET

В следующем примере некоторые методы, описанные в руководстве по базовым операциям со строками, используются для создания класса, который выполняет обработку строк так же, как это происходит в реальном приложении. Класс MailToData хранит имя и адрес человека в отдельных свойствах и предоставляет способ объединения полей City , State и Zip в одну строку для отображения пользователю. Кроме того, при использовании этого класса пользователь может указать город, область и почтовый индекс в виде одной строки. Приложение автоматически анализирует одну строку и вводит соответствующие сведения в соответствующее свойство.

В этом упрощенном примере используется консольное приложение с интерфейсом командной строки.

Пример

using System; class MainClass < static void Main() < MailToData MyData = new MailToData(); Console.Write("Enter Your Name: "); MyData.Name = Console.ReadLine(); Console.Write("Enter Your Address: "); MyData.Address = Console.ReadLine(); Console.Write("Enter Your City, State, and ZIP Code separated by spaces: "); MyData.CityStateZip = Console.ReadLine(); Console.WriteLine(); if (MyData.Validated) < Console.WriteLine("Name: ", MyData.Name); Console.WriteLine("Address: ", MyData.Address); Console.WriteLine("City: ", MyData.City); Console.WriteLine("State: ", MyData.State); Console.WriteLine("Zip: ", MyData.Zip); Console.WriteLine("\nThe following address will be used:"); Console.WriteLine(MyData.Address); Console.WriteLine(MyData.CityStateZip); > > > public class MailToData < string name = ""; string address = ""; string citystatezip = ""; string city = ""; string state = ""; string zip = ""; bool parseSucceeded = false; public string Name < getset > public string Address < getset > public string CityStateZip < get < return String.Format(", ", city, state, zip); > set < citystatezip = value.Trim(); ParseCityStateZip(); >> public string City < getset > public string State < getset > public string Zip < getset > public bool Validated < get < return parseSucceeded; >> private void ParseCityStateZip() < string msg = ""; const string msgEnd = "\nYou must enter spaces between city, state, and zip code.\n"; // Throw a FormatException if the user did not enter the necessary spaces // between elements. try < // City may consist of multiple words, so we'll have to parse the // string from right to left starting with the zip code. int zipIndex = citystatezip.LastIndexOf(" "); if (zipIndex == -1) < msg = "\nCannot identify a zip code." + msgEnd; throw new FormatException(msg); >zip = citystatezip.Substring(zipIndex + 1); int stateIndex = citystatezip.LastIndexOf(" ", zipIndex - 1); if (stateIndex == -1) < msg = "\nCannot identify a state." + msgEnd; throw new FormatException(msg); >state = citystatezip.Substring(stateIndex + 1, zipIndex - stateIndex - 1); state = state.ToUpper(); city = citystatezip.Substring(0, stateIndex); if (city.Length == 0) < msg = "\nCannot identify a city." + msgEnd; throw new FormatException(msg); >parseSucceeded = true; > catch (FormatException ex) < Console.WriteLine(ex.Message); >> private string ReturnCityStateZip() < // Make state uppercase. state = state.ToUpper(); // Put the value of city, state, and zip together in the proper manner. string MyCityStateZip = String.Concat(city, ", ", state, " ", zip); return MyCityStateZip; >> 
Class MainClass Public Shared Sub Main() Dim MyData As New MailToData() Console.Write("Enter Your Name: ") MyData.Name = Console.ReadLine() Console.Write("Enter Your Address: ") MyData.Address = Console.ReadLine() Console.Write("Enter Your City, State, and ZIP Code separated by spaces: ") MyData.CityStateZip = Console.ReadLine() Console.WriteLine() If MyData.Validated Then Console.WriteLine("Name: ", MyData.Name) Console.WriteLine("Address: ", MyData.Address) Console.WriteLine("City: ", MyData.City) Console.WriteLine("State: ", MyData.State) Console.WriteLine("ZIP Code: ", MyData.Zip) Console.WriteLine("The following address will be used:") Console.WriteLine(MyData.Address) Console.WriteLine(MyData.CityStateZip) End If End Sub End Class Public Class MailToData Private strName As String = "" Private strAddress As String = "" Private strCityStateZip As String = "" Private strCity As String = "" Private strState As String = "" Private strZip As String = "" Private parseSucceeded As Boolean = False Public Property Name() As String Get Return strName End Get Set strName = value End Set End Property Public Property Address() As String Get Return strAddress End Get Set strAddress = value End Set End Property Public Property CityStateZip() As String Get Return String.Format(", ", strCity, strState, strZip) End Get Set strCityStateZip = value.Trim() ParseCityStateZip() End Set End Property Public Property City() As String Get Return strCity End Get Set strCity = value End Set End Property Public Property State() As String Get Return strState End Get Set strState = value End Set End Property Public Property Zip() As String Get Return strZip End Get Set strZip = value End Set End Property Public ReadOnly Property Validated As Boolean Get Return parseSucceeded End Get End Property Private Sub ParseCityStateZip() Dim msg As String = Nothing Const msgEnd As String = vbCrLf + "You must enter spaces between city, state, and zip code." + vbCrLf ' Throw a FormatException if the user did not enter the necessary spaces ' between elements. Try ' City may consist of multiple words, so we'll have to parse the ' string from right to left starting with the zip code. Dim zipIndex As Integer = strCityStateZip.LastIndexOf(" ") If zipIndex = -1 Then msg = vbCrLf + "Cannot identify a zip code." + msgEnd Throw New FormatException(msg) End If strZip = strCityStateZip.Substring(zipIndex + 1) Dim stateIndex As Integer = strCityStateZip.LastIndexOf(" ", zipIndex - 1) If stateIndex = -1 Then msg = vbCrLf + "Cannot identify a state." + msgEnd Throw New FormatException(msg) End If strState = strCityStateZip.Substring(stateIndex + 1, zipIndex - stateIndex - 1) strState = strState.ToUpper() strCity = strCityStateZip.Substring(0, stateIndex) If strCity.Length = 0 Then msg = vbCrLf + "Cannot identify a city." + msgEnd Throw New FormatException(msg) End If parseSucceeded = True Catch ex As FormatException Console.WriteLine(ex.Message) End Try End Sub End Class 

При выполнении предыдущего кода пользователю предлагается ввести его имя и адрес. Приложение размещает сведения в соответствующих свойствах и отображает их для пользователя, создавая одну строку, в которой представлены сведения о городе, области и почтовом индексе.

Читайте также:  Символ возврата каретки java

См. также

Источник

Си шарп работа со строками

Конкатенация строк или объединение может производиться как с помощью операции + , так и с помощью метода Concat :

string s1 = "hello"; string s2 = "world"; string s3 = s1 + " " + s2; // результат: строка "hello world" string s4 = string.Concat(s3, ". "); // результат: строка "hello world. " Console.WriteLine(s4);

Метод Concat является статическим методом класса string, принимающим в качестве параметров две строки. Также имеются другие версии метода, принимающие другое количество параметров.

Для объединения строк также может использоваться метод Join :

string s5 = "apple"; string s6 = "a day"; string s7 = "keeps"; string s8 = "a doctor"; string s9 = "away"; string[] values = new string[] < s5, s6, s7, s8, s9 >; string s10 = string.Join(" ", values); Console.WriteLine(s10); // apple a day keeps a doctor away

Метод Join также является статическим. Использованная выше версия метода получает два параметра: строку-разделитель (в данном случае пробел) и массив строк, которые будут соединяться и разделяться разделителем.

Сравнение строк

Для сравнения строк применяется статический метод Compare :

string s1 = "hello"; string s2 = "world"; int result = string.Compare(s1, s2); if (result <0) < Console.WriteLine("Строка s1 перед строкой s2"); >else if (result > 0) < Console.WriteLine("Строка s1 стоит после строки s2"); >else < Console.WriteLine("Строки s1 и s2 идентичны"); >// результатом будет "Строка s1 перед строкой s2"

Данная версия метода Compare принимает две строки и возвращает число. Если первая строка по алфавиту стоит выше второй, то возвращается число меньше нуля. В противном случае возвращается число больше нуля. И третий случай — если строки равны, то возвращается число 0.

В данном случае так как символ h по алфавиту стоит выше символа w, то и первая строка будет стоять выше.

Поиск в строке

С помощью метода IndexOf мы можем определить индекс первого вхождения отдельного символа или подстроки в строке:

string s1 = "hello world"; char ch = 'o'; int indexOfChar = s1.IndexOf(ch); // равно 4 Console.WriteLine(indexOfChar); string substring = "wor"; int indexOfSubstring = s1.IndexOf(substring); // равно 6 Console.WriteLine(indexOfSubstring);

Подобным образом действует метод LastIndexOf , только находит индекс последнего вхождения символа или подстроки в строку.

Еще одна группа методов позволяет узнать начинается или заканчивается ли строка на определенную подстроку. Для этого предназначены методы StartsWith и EndsWith . Например, в массиве строк хранится список файлов, и нам надо вывести все файлы с расширением exe:

var files = new string[] < "myapp.exe", "forest.jpg", "main.exe", "book.pdf", "river.png" >; for (int i = 0; i

Разделение строк

С помощью функции Split мы можем разделить строку на массив подстрок. В качестве параметра функция Split принимает массив символов или строк, которые и будут служить разделителями. Например, подсчитаем количество слов в сроке, разделив ее по пробельным символам:

string text = «И поэтому все так произошло»; string[] words = text.Split(new char[] < ' ' >); foreach (string s in words)

Это не лучший способ разделения по пробелам, так как во входной строке у нас могло бы быть несколько подряд идущих пробелов и в итоговый массив также бы попадали пробелы, поэтому лучше использовать другую версию метода:

string[] words = text.Split(new char[] < ' ' >, StringSplitOptions.RemoveEmptyEntries);

Второй параметр StringSplitOptions.RemoveEmptyEntries говорит, что надо удалить все пустые подстроки.

Обрезка строки

Для обрезки начальных или концевых символов используется функция Trim :

string text = " hello world "; text = text.Trim(); // результат "hello world" text = text.Trim(new char[] < 'd', 'h' >); // результат "ello worl"

Функция Trim без параметров обрезает начальные и конечные пробелы и возвращает обрезанную строку. Чтобы явным образом указать, какие начальные и конечные символы следует обрезать, мы можем передать в функцию массив этих символов.

Эта функция имеет частичные аналоги: функция TrimStart обрезает начальные символы, а функция TrimEnd обрезает конечные символы.

Обрезать определенную часть строки позволяет функция Substring :

string text = "Хороший день"; // обрезаем начиная с третьего символа text = text.Substring(2); // результат "роший день" Console.WriteLine(text); // обрезаем сначала до последних двух символов text = text.Substring(0, text.Length - 2); // результат "роший де" Console.WriteLine(text);

Функция Substring также возвращает обрезанную строку. В качестве параметра первая использованная версия применяет индекс, начиная с которого надо обрезать строку. Вторая версия применяет два параметра — индекс начала обрезки и длину вырезаемой части строки.

Вставка

Для вставки одной строки в другую применяется функция Insert :

string text = "Хороший день"; string substring = "замечательный "; text = text.Insert(8, substring); Console.WriteLine(text); // Хороший замечательный день

Первым параметром в функции Insert является индекс, по которому надо вставлять подстроку, а второй параметр — собственно подстрока.

Удаление строк

Удалить часть строки помогает метод Remove :

string text = "Хороший день"; // индекс последнего символа int ind = text.Length - 1; // вырезаем последний символ text = text.Remove(ind); Console.WriteLine(text); // Хороший ден // вырезаем первые два символа text = text.Remove(0, 2); Console.WriteLine(text); // роший ден

Первая версия метода Remove принимает индекс в строке, начиная с которого надо удалить все символы. Вторая версия принимает еще один параметр — сколько символов надо удалить.

Замена

Чтобы заменить один символ или подстроку на другую, применяется метод Replace :

string text = "хороший день"; text = text.Replace("хороший", "плохой"); Console.WriteLine(text); // плохой день text = text.Replace("о", ""); Console.WriteLine(text); // плхй день

Во втором случае применения функции Replace строка из одного символа «о» заменяется на пустую строку, то есть фактически удаляется из текста. Подобным способом легко удалять какой-то определенный текст в строках.

Смена регистра

Для приведения строки к верхнему и нижнему регистру используются соответственно функции ToUpper() и ToLower() :

string hello = "Hello world!"; Console.WriteLine(hello.ToLower()); // hello world! Console.WriteLine(hello.ToUpper()); // HELLO WORLD!

Источник

Оцените статью