Строки в С#
Отдельные символы, чаще всего, его называют типом Char. Строки постоянной длины, часто они представляются массивом символов Char[]. Строки переменной длины - это, как правило, тип String, соответствующий современному представлению о строковом типе.
Класс char - cимвол, заключенный в одинарные кавычки; - escape-последовательность, задающая код символа; - Unicode-последовательность, задающая Unicode-код символа. Статические методы и свойства класса Char
Класс char[] public void TestCharArAndString() { //char[] strM1 = "Hello, World!"; - ошибка: нет преобразования класса string в класс char[] string hello = "Здравствуй, Мир!"; char[] strM1 = hello.ToCharArray(); PrintCharAr("strM1",strM1); //копирование подстроки char[] World = new char[3]; Array.Copy(strM1,12,World,0,3); PrintCharAr("World",World); Console.WriteLine(CharArrayToString(World)); } void PrintCharAr(string name,char[] ar) { Console.WriteLine(name); for(int i=0; i < ar.Length; i++) Console.Write(ar[i]); Console.WriteLine(); } string CharArrayToString(char[] ar){ string result=""; for(int i = 0; i< ar.Length; i++) result += ar[i]; return(result); }
Класс String Конструкторы: String(char ch, int iCount); String(char[] ach); String(char[] ach, Int iStartlndex, int iCount); public void TestDeclStrings(){ string world = "Мир"; //string s1 = new string("s1"); - ошибка //string s2 = new string(); - ошибка string sssss = new string('s',5); char[] yes = "Yes".ToCharArray(); string stryes = new string(yes); string strye = new string(yes,0,2); }
Операции над строками присваивание (=); две операции проверки эквивалентности (= =) и (!=); конкатенация или сцепление строк (+); взятие индекса ([]). public void TestOpers() { string s1 ="ABC", s2 ="CDE"; string s3 = s1+s2; bool b1 = (s1==s2); char ch1 = s1[0], ch2=s2[0]; s2 = s1; b1 = (s1!=s2); ch2 = s2[0]; //Неизменяемые значения s1= "Zenon"; //s1[0]='L'; }
Статические методы и свойства класса String
Динамические методы класса String
Копирование строки и подстроки object Clone(); string Copy(string str); string Substring(int iStartlndex); string Substring(int iStartlndex, int ICount) ; Преобразования строк string ToUpper(CultureInfo ci); string ToLower(CultureInfo ci); Конкатенация строк string Concat(string strl, string str2); string Concat(string strl, string str2, string str3); string Concat(string strl, string str2, string str3, string str4); string Concat(params string[] astr); Объединение строк string Join(string strSeparator, string[] astr); string Join(string strSeparator, string[] astr, int iStartlndex, int iCount);
Сравнение строк bool Equals(string str); bool Equals(object obj); bool StartsWith(string str); bool EndsWith(string str); А вот результат лексического сравнения; d < D < e < E < e < E < e < E < e < E < e < E < f < F int CompareTo(string str2); int CompareTo(object obj2); int Compare(string str1, string str2); int Compare(string str1, string str2, bool blgnoreCase); int Compare(string str1, string str2, bool blgnoreCase, Culturelnfo ci); int Compare(string str1, int iStartlndexl, string str2, int iStartIndex2, int iCount); int Compare(string str1, int iStartlndexl, string str2, int iStartIndex2, int iCount, bool blgnoreCase); Вот результат числового сравнения некоторых символов: D < E < F < d < e < f < E < E < E < E < e < e < e < e int CompareOrdinal(string str1, string str2); int CompareOrdinal(string str1, int iStartlndexl, string str2, int iStartIndex2, int iCount); int Compare(string str1, int iStartlndexl, string str2, int iStartIndex2, int iCount, bool blgnoreCase, Culturelnfo ci);
Поиск в строках int IndexOf(char ch); int IndexOf(char ch, int iStartIndex); Int IndexOf(char ch, int iStartlndex, int iCount); int IndexOf(string str); int IndexOf(string str, int iStartlndex); int IndexOf(string str, int iStartlndex, int iCount); int Lastlndex0f(char ch); int Lastlndex0f(char ch, int iStartlndex); int Lastlndex0f(char ch, int iStartlndex. int iCount); int Lastlndex0f(string str); int Lastlndex0f(string str, int iStartlndex); int Lastlndex0f(string str, int iStartlndex, int iCount); int IndexOfAny(char[] ach); int IndexQfAny(char[] ach, int iStartlndex); int IndexOfAny(char[] ach, int iStartlndex, int iCount); int LastIndexOfAny(char[] ach); int LastIndexOfAny(char[] ach, int iStartlndex); int LastIndexOfAny(char[] ach, int iStartlndex, int iCount);
Отсечение и заполнение string Trim(); string Trim(params char[] ach); string TrimStart(params char[] ach); string TrimEnd(params char[] ach); str.Trim( ', '-', '_'}; string PadLeft(int iTotalLength); string PadLeft(int iTotalLength, char ch); string PadRight(int iTotalLength); string PadRight(int iTotalLength, char ch); Манипуляции со строками string Insert(int iIndex, string strInsert); string Remove(int iIndex, int iCount); string Replace(char chOld, char chNew); string Replace(string strOld, string strNew);
Разбиение строк на массив string[] Split(params char[] achSeparators); string[] Split(params char[] achSeparators, int IReturnCount); Форматирование строк string Format(string strFormat, object obj0); string Format(string strFormat, object obj0, object objl); string Format(string strFormat, object obj0, object obj1, object obj2); string Format{string strFormat, params object[] aobj); string str = String.Format("The sum of {0} and {1} is {2}", 2, 3, 2 + 3); //возвращает строку "The sum of 2 and 3 is 5» {N [,M [: ]]}
Сортировка в массивах строк Применяют int CompareTo(object obj): void Sort(Array агг); void Sort(Array агг, int iStartlndex, int iCount); Применяют int Compare(object objl, object obj2); void Sort(Array агг, IComparer comp); void Sort(Array агг, int iStartlndex, int iCount, IComparer comp); void Sort(Array arrKeys, Array arrltems, IComparer comp); void Sort(Array arrKeys, Array arrltems, int iStartlndex, iCount, IComparer comp); Поиск в массивах строк int BinarySearch(Array агг, object obj); int BinarySearch(Array агг, int iStartlndex, int iCount, object obj); int BinarySearch(Array агг, object obj, IComparer comp); int BinarySearch(Array агг, int iStartlndex, int iCount, object obj, IComparer comp);
public void TestSplitAndJoin(){ string txt = "А это пшеница, которая в темном чулане хранится," +" в доме, который построил Джек!"; Console.WriteLine("txt={0}", txt); Console.WriteLine("Разделение текста на простые предложения:"); string[] SimpleSentences, Words; SimpleSentences = txt.Split(','); // метод сам создает массив for(int i=0;i< SimpleSentences.Length; i++) Console.WriteLine("SimpleSentences[{0}]= {1}", i, SimpleSentences[i]); string txtjoin = string.Join(",",SimpleSentences); Console.WriteLine("txtjoin={0}", txtjoin); Words = txt.Split(',', ' '); for(int i=0;i< Words.Length; i++) Console.WriteLine("Words[{0}]= {1}",i, Words[i]); txtjoin = string.Join(" ",Words); Console.WriteLine("txtjoin={0}", txtjoin); }
Класс StringBuilder Конструкторы: public StringBuilder (string str, int cap). str задает строку инициализации, cap - емкость объекта; public StringBuilder (int curcap, int maxcap). curcap и maxcap задают начальную и максимальную емкость объекта; public StringBuilder (string str, int start, int len, int cap). str, start, len задают строку инициализации, cap - емкость объекта. свойство Capacity - возвращает или устанавливает текущую емкость буфера; свойство MaxCapacity - возвращает максимальную емкость буфера; метод int EnsureCapacity (int capacity) - позволяет уменьшить емкость буфера.
static void Main(string[] args) { StringBuilder txtbuild = new StringBuilder(); StringBuilder strbuild = new StringBuilder("Hello",2000); int curvol1 = txtbuild.Capacity; int curvol2 = strbuild.Capacity; int maxvol1 = txtbuild.MaxCapacity; int maxvol2 = strbuild.MaxCapacity; Console.WriteLine("curvol1= {0}", curvol1); Console.WriteLine("curvol2= {0}", curvol2); Console.WriteLine("maxvol1= {0}", maxvol1); Console.WriteLine("maxvol2= {0}", maxvol2); int sure1 = txtbuild.EnsureCapacity(100); int sure2 = strbuild.EnsureCapacity(100); Console.WriteLine("sure1= {0}", sure1); Console.WriteLine("sure2= {0}", sure2); curvol2 = strbuild.Capacity; Console.WriteLine("curvol2= {0}", curvol2); //strbuild.Capacity = 3; ошибка! попытка установить емкость меньше длины строки strbuild.Capacity = 256; //так можно! curvol2 = strbuild.Capacity; Console.WriteLine("curvol2= {0}", curvol2); //увеличим строку - емкость увеличится int len = txtbuild.Length; txtbuild.Append(txtbuild.ToString()); curvol1 = txtbuild.Capacity; Console.WriteLine("curvol1= {0}", curvol1); txtbuild.Remove(len, len); //уменьшим строку curvol1 = txtbuild.Capacity; Console.WriteLine("curvol1= {0}", curvol1); }
Операции над строками и основные методы присваивание (=); две операции проверки эквивалентности (= =) и (!=); взятие индекса ([]). public StringBuilder Append ( ). - К строке присоединяется строка, полученная из объекта, который передан методу в качестве параметра. public StringBuilder Insert (int location, ). - Метод вставляет строку, полученную из объекта, в позицию, указанную параметром location. public StringBuilder Remove (int start, int len). - Метод удаляет подстроку длины len, начинающуюся с позиции start; public StringBuilder Replace (string str1,string str2). - Все вхождения подстроки str1 заменяются на строку str2; public StringBuilder AppendFormat (, ).
StringBuilder strbuild = new StringBuilder(); string str = "это это не "; strbuild.Append(str); strbuild.Append(true); strbuild.Insert(4,false); strbuild.Insert(0,"2*2=5 - "); Console.WriteLine(strbuild); string txt = "А это пшеница, которая в темном чулане хранится," + " в доме, который построил Джек!"; StringBuilder txtbuild = new StringBuilder(); int num =1; foreach(string sub in txt.Split(',')){ txtbuild.AppendFormat(" {0}: {1} ", num++,sub); } str = txtbuild.ToString(); Console.WriteLine(str); }
Строковые константы обычные константы - строка символов, заключенная в - строка символов, заключенная в кавычки, c предшествующим s1= "\x50"; b1= (s1==s2); Console.WriteLine("s1={0}, s2={1}, b1={2}", s1,s2,b1); s1 = "c:\\c#book\\ch5\\chapter5.doc"; s2 b1= (s1==s2); Console.WriteLine("s1={0}, s2={1}, b1={2}", s1,s2,b1); s1= "\"A\""; b1= (s1==s2); Console.WriteLine("s1={0}, s2={1}, b1={2}", s1,s2,b1);