Урок по работе со строками (String) на C#
Давайте на конкретном примере научимся работать со строками в C#: объединять их, разделять, находить нужную позицию символа и вставлять подстроки. Урок написан специально для Александра из Китая :)
Итак, на одном из прошлых занятий мы создали консольный калькулятор на си шарп. Итоговое значение калькулятора представляет собой число. Тип – int или double. Нам необходимо это число привести к такому виду, чтобы удобно было читать: отделять запятой по три значения – то есть каждый тысячный – миллионный и миллиардный разряды.
Например, предположим, в итоге у нас получилось число 345870124, требуется привести его к виду 345,870,124. Есть разные способы решения этой задачи, мы рассмотрим один из них и на примере его научимся работать со строками.
Прежде всего, нам надо число преобразовать в строку. Это можно сделать несколькими способами. Самый простой – это использовать метод ToString:
int itog = 345870124; String str = itog.ToString();Или так:
String str = itog+"";В этом случае компилятор сам автоматически создаст пустую строку, а при конкатенации числа с этой пустой строкой результат также автоматически будет строкой.
Итак, строку мы получили. Теперь необходимо вставить в неё запятые в нужных местах. Для этого надо использовать функцию Insert: Insert (“индекс элемента”, ”строка”); То есть, в нашем конкретном случае это будет выглядеть так:
String itog_str = str.Insert(3, ","); itog_str = itog_str.Insert(7, ",");Что мы сделали? Мы вставили после третьего символа запятую в первой строке кода, а во второй – после седьмого. Почему после седьмого? Потому, что после вставки у нас увеличилась длина.
Казалось бы, задача решена? Не совсем. Дело в том, что мы сейчас имеем дело с определённым числом, а что если оно будет другим. Например, таким:
int itog = 1000000; String str = itog.ToString(); String itog_str = str.Insert(3, ","); itog_str = itog_str.Insert(7, ",");И получим мы вот такую строку в результате: 100,000,0. Почему так получилось? Просто мы считали с начала строки индекс, а необходимо работать с конца. Для этого надо для начала найти длину строки:
int dlinaStroki = str.Length;Теперь, зная длину, просто вычитаем из неё три и вставляем запятую:
String itog_str = str.Insert(dlinaStroki - 3, ",");Это для отделения тысяч. А миллионов?
String itog_str = str.Insert(dlinaStroki - 3, ","); itog_str = itog_str.Insert(dlinaStroki - 6, ",");Аналогично можно продолжить и выше. Для чисел типа int этого вполне хватит, но есть и другие. Обертка BigInteger или хотя бы long, ulong. Вот что делать с таким числом:
ulong itog = 10000000000000000000;А все просто. Находим длину его, делим на три и циклом проходим столько раз, сколько надо:
ulong itog = 10000000000000000000; String str = itog.ToString(); int dlinaStroki = str.Length; int prohod = (dlinaStroki-1) / 3; for (int i = 1; i <= prohod; i++) { str = str.Insert(dlinaStroki - 3*i, ","); } Console.WriteLine(str); Console.ReadKey();Работает?
Работает. Причем с числами любой длины: от единицы и до бесконечности. Теоретически.
Интересный момент: мы из длины строки вычитаем единицу, перед тем, как разделить её на три. Зачем это делается? Дело в том, что если этого не сделать, то у нас получается лишний последний проход и будет запятая перед числом – особенности целочисленного деления.
Задачу мы решили. Но еще познакомимся с парой методов для строк, которые могут быть полезны и стоит их знать любому программисту.
Обрезка строк
Обрезать определенную часть строки позволяет функция Substring:
String txt = "Игра продолжается"; // обрезаем начиная с пятого символа txt = txt.Substring(4); // результат "продолжается" Console.WriteLine(text);Поиск в строке
С помощью метода IndexOf мы можем определить индекс первого вхождения отдельного символа или подстроки в строке:
String st = "Привет, друг"; char ch = 'т'; int indexOfChar = st.IndexOf(ch); // равно 5 Console.WriteLine(indexOfChar);
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.