C#. Тип string. Примеры Функции, свойства, операции




Тип string. Примеры. Функции, свойства, операции


Содержание


Поиск на других ресурсах:

1. Какие характерные особенности типа string в языке C#?

В языке C# встроенный тип данных string поддерживает символьные строки в кодировке Unicode. Для строк типа string можно выделить следующие особенности:

  • любая переменная типа string представляет собой объект класса System.String;
  • тип string относится к ссылочным типам а не типам-значениям;
  • строки типа string размещаются в «куче» (heap);
  • к строкам типа string можно применять разнообразные методы, свойства и операции;
  • строку типа string можно создавать с использованием оператора new и без использования этого оператора путем присваивания =;
  • содержимое объекта типа string изменить нельзя.

Пример строки-литерала типа string:

"This is a text"

 


2. Способы создания экземпляра типа string

Как известно тип string есть псевдонимом класса System.String, который имеет несколько конструкторов. С помощью этих конструкторов можно создавать экземпляры класса string. Ниже приводится пример программы, в которой продемонстрировано создание экземпляров типа string разными способами.

using System;

namespace ConsoleApp1
{
  class Program
  {
    static void Main(string[] args)
    {
      // Способы создания экземпляра типа string
      // 1. Создание и инициализация строки при объявлении
      string s1 = "Hello";
      Console.WriteLine("s1 = {0}", s1);

      // 2. Создание строки из массива типа char[]
      char[] ArrayChar = { 'H', 'e', 'l', 'l', 'o' };
      string s2 = new string(ArrayChar);
      Console.WriteLine("s2 = {0}", s2);

      string s3 = new string(ArrayChar, 2, 3); // получить часть строки
      Console.WriteLine("s3 = {0}", s3);

      // 3. Создание строки с помощью перегруженного оператора присваивания =
      string s4;
      s4 = "Hello";
      Console.WriteLine("s4 = {0}", s4);

      // 4. Создание строки из одного символа
      string s5 = new string('+', 10); // символ '+' - 10 раз
      Console.WriteLine("s5 = {0}", s5);

      // 5. Буквальные строки (verbatim strings)
      string s6;
      s6 = @"C:\Programs\abc.txt"; // это буквальная строка, перед строкой размещен @
      Console.WriteLine("s6 = {0}", s6);          
      Console.ReadKey();
    }
  }
}

Результат выполнения программы

s1 = Hello
s2 = Hello
s3 = llo
s4 = Hello
s5 = ++++++++++
s6 = C:\Programs\abc.txt

 


3. Как в переменную типа string занести значение строки? Операция присваивания =

Для этого нужно использовать оператор присваивания ‘=‘.

Вариант 1. Присваивание после описания.

string s; // описание переменной
s = "This is a text"; // присваивание значения текста

Вариант 2. Присваивание во время описания (начальная инициализация).

string s = "This is a text"; // начальная инициализация

Вариант 3. Использование метода Copy().

s = string.Copy("This is a text"); // s = "This is a text"

 


4. Как определить, равны ли две строки типа string между собой? Операция сравнения ==

Две строки можно сравнивать обычным оператором сравнения «==«.

Фрагмент кода, который определяет равенство (неравенство) двух строк:

string s1 = "Hello!";
string s2 = "Hello!";
bool f_equal;
if (s1 == s2)
    f_equal = true;
else
    f_equal = false;

 


5. Как сравнить две строки типа string в лексикографическом порядке? Метод CompareTo()

В этом случае можно использовать метод CompareTo(). Метод возвращает -1, 0 или 1.

В приведенном примере видно результат работы метода.

string s1 = "abcd";
string s2 = "abcde";
int res;
res = s1.CompareTo(s2); // res = -1, (s1<s2)
res = s2.CompareTo(s1); // res = 1, (s2>s1)
s2 = s1; // строки равны
res = s1.CompareTo(s2); // res = 0, (s1==s2)
res = s2.CompareTo(s1); // res = 0





 

6. Как соединить две строки типа string? Метод Concat(), операция +

Способ №1 — функция Concat().

string s1 = "Hello ";
string s2 = "world!";
string s3;
s3 = string.Concat(s1, s2); // s3 = "Hello world!"

Способ № 2 — использование оператора «+».

string s1 = "Hello ";
string s2 = "world!";
string s3;
s3 = s1 + s2; // s3 = "Hello world!"

 


7. Как скопировать одну строку типа string в другую? Метод Copy(), оператор присваивания =

Способ № 1 — оператор присваивания.

string s1 = "My string";
string s2;
s2 = s1; // s2 = "My string"

Способ №2 — метод Copy().

string s1 = "My string";
string s2;
s2 = string.Copy(s1); // s2 = "My string"

 


8. Вставка подстроки начиная из заданного индекса. Метод Insert()

Для вставки подстроки используется функция Insert(). Функция принимает два параметра. Первый параметр – позиция индекса в строке, из которой делается вставка (начинается с 0). Второй параметр – текст самой строки.

string s1 = "ABEF";
string s2;
s2 = s1.Insert(2, "CD"); // s2 = "ABCDEF"
s1 = "123";
s2 = s1.Insert(0, "555"); // s2 = "555123"

// Ошибка!
// Заданный аргумент находится за пределами допустимых значений.
// s2 = s1.Insert(20, "33");

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

 


9. Поиск и получение индекса первого вхождения подстроки в данную строку. Метод IndexOf()

Эта операция реализуется функцией IndexOf(). Если найдена подстрока в строке, то функция возвращает позицию первого вхождения. В другом случае функция возвращает -1.

Функция имеет перегруженные варианты реализации.

string s = "Hello world!";
int index;
index = s.IndexOf("wor"); // index = 6
index = s.IndexOf("abc"); // index = -1

// другой вариант функции IndexOf()
index = s.IndexOf("wor", 7); // index = -1 - поиск из позиции 7
index = s.IndexOf("wor", 0); // index = 6 - поиск из позиции 0

// поиск идет от заданного индекса (3)
// и проверяется заданное количество символов (5)
index = s.IndexOf("wo", 3, 5); // index = 6

 


10. Поиск и получение индекса последнего вхождения подстроки в данную строку функцией LastIndexOf().

Функция имеет несколько перегруженных реализаций. Нумерация индекса последнего вхождения начинается с 0.

string s = "bestprog.net";
int index;
index = s.LastIndexOf("prog"); // index = 4

 


11. Как определить длину строки типа string? Свойство Length

Для определения длины строки (количество символов) типа string используется свойство Length.

string s = "bestprog.net";
int len;
len = s.Length; // len = 12
s = ""; // len = 0

 


12. Создание строки заданной ширины. Функции PadLeft() и PadRight()

Функции PadLeft() и PadRight() используются для создания форматированной строки, в которой позиции справа или слева заполняются пробелами.

string s1 = "abc";
string s2;
s2 = s1.PadLeft(5); // s2 = " abc"
s2 = s1.PadLeft(2); // s2 = "abc"
s2 = s1.PadLeft(9); // s2 = "     abc"

// ошибка "Non-negative number required."
// "Нужно неотъемлемое число
// s2 = s1.PadLeft(-2);

s2 = s1.PadRight(2); // s2 = "abc"
s2 = s1.PadRight(8); // s2 = "abc     "

 


13. Удаление заданного количества символов из строки. Функция Remove()

Функция Remove() имеет две реализации. В первой реализации функция имеет два параметра. Во второй – один параметр.

Пример 1. Реализация функции Remove() с двумя параметрами.

string s1 = "0123456789";
string s2;
s2 = s1.Remove(3, 2); // s2 = "01256789"

В данном примере функция Remove() получает два параметра. Первый параметр – позиция, из которой делается удаление. Второй параметр – количество удаленных символов.

Пример 2. Реализация с одним параметром.

string s1 = "0123456789";
string s2;
s2 = s1.Remove(4); // s2 = "0123"

В этом примере функция получает один параметр. Этот параметр определяет позицию из которой будет осуществлено удаление символов до конца строки.

Если указать

s2 = s1.Remove(0);

то будет удалена вся строка.

Пример 3. Если нужно удалить последний символ в строке, то нужно написать такой код.

string s1 = "This is a text!";
string s2;
int len;
len = s1.Length;
s2 = s1.Remove(len-1); // s2 = "This is a text"

 


14. Замена символов в строке. Функция Replace()

Функция Replace() имеет два варианта реализации.

Первый вариант оперирует строками типа string. Второй вариант оперирует типом char.

Пример 1. Использование функции Replace() для замены одной строки на другую.

string s1 = "0123456789";
string s2;
s2 = s1.Replace("012", "ABC"); // s2 = "ABC3456789"

Пример 2. Использование функции Replace() для замены символа ‘0’ на символ ‘A’.

string s1 = "0123456789";
string s2;
s2 = s1.Replace('0', 'A'); // s2 = "A123456789"

 


15. Как в строке выделить подстроку. Функция Substring()

Функция Substring() имеет две реализации.

Вариант 1. Выделение подстроки с заданной позиции до конца строки.

string s1 = "Automobile";
string s2;
s2 = s1.Substring(4); // s2 = "mobile

Вариант 2. Выделение подстроки с заданной позиции (параметр 1) в заданном количестве символов (параметр 2).

string s1 = "Automobile";
string s2;
s2 = s1.Substring(0, 4); // s2 = "Auto"

 


16. Преобразование числовой строки типа string в целое число. Функция Parse()

Функция Parse() разрешает переводить строку, которая состоит из цифр, в целое число. Такая функция полезна если нужно получить число, которое было введено из клавиатуры и получено в виде строки. Например, ввод из элемента управления типа TextBox.

// string => int
string s = "389";
int i;
i = int.Parse(s);
i = int.Parse("-29"); // i = -29

 


17. Преобразование целого числа в строку. Функция ToString()

Функция ToString() переводит целое число в его строчное представление. Например, такая функция полезная, если нужно вывести целое число на форму в элементе управления Label.

// int => string
string s;
int i;
i = 230;
s = i.ToString(); // s = "230"

 


18. Преобразование строки string в число с плавающей запятой (вещественное число)

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

Если у вас установлена операционная система с кирилличной кодировкой и настроены соответствующие региональные стандарты, тогда символ ‘.’ может быть заменен на символ ‘,’. Это связано с тем, что в странах, которые используют кириллицу как разделитель между целой и дробной частями, есть символ ‘,’ (запятая). А в англоязычных странах разделителем целой и дробовой частей есть символ ‘.’ (точка).

Символ-разделитель целой и дробной частей можно изменить в региональных настройках Windows.

Поэтому, в ОС Windows с кириллическим кодированием по умолчанию, следующий код вызовет исключительную ситуацию FormatException с сообщением: «Input string was not in a correct format» (Исходная строка имеет неверный формат).

double x;
string s;
s = "9.83";
// генерируется исключительная ситуация FormatException
// с сообщением "Input string was not in a correct format."
x = double.Parse(s);

Ниже приведен правильный вариант для ОС с кирилличной кодировкой:

// string => double
double x;
string s;
s = "9,83";
x = double.Parse(s);

 


19. Преобразование числа с плавающей запятой в string.
// double => string
double x;
string s;
x = -39.038;
s = x.ToString(); // s = "-39,038"

 


20. Перевод значения переменной логического типа bool в строку string
// string => bool
bool b;
string s;
s = "true";
b = bool.Parse(s); // b = True

Если ввести неправильное значение в строку s, то генерируется исключительная ситуация с сообщением:

"String was not recognized as a valid Boolean"

 


21. Постоянство строк. Как в строке типа string заменить символ в заданной позиции: s[index] = c

В языке C# тип string имеет одну особенность. Доступ к отдельному символу строки осуществляется в режиме чтения. Непосредственно изменить значение символа в строке не получится. Это означает, что строки есть постоянными (константными).

Нижеследующий фрагмент кода

string s = "Hello world!";
s[6] = 'W'; // ошибка!!! - символ можно только прочитать
char c;
c = s[6]; // c = 'w' - так работает

в строке

s[6] = 'W';

вызовет ошибку компилятора

Property or indexer 'string.this[int]' cannot be assigned to -- it is read only

Значит, значение символа в заданной позиции строки типа string можно только прочитать.

Чтобы решить эту задачу можно использовать (как пример) один из предложенных способов.

Способ 1. Использование методов Substring() и String(). При использовании этого способа нужно выполнять проверку значения индекса на корректность. Если значение индекса выходит за пределы размерности строки, то возникнет исключительная ситуация.

// Как в строке заменить символ в заданной позиции: s[index]=c
// Способ 1. Использование методов Substring(), ToString().
// Входные данные:
string s = "Hello world!"; // исходная строка
int index = 0; // индекс в строке, где нужно сделать замену (начинается с 0)
char c = '+'; // символ замены

// Проверка значения index на корректность
if ((index >= 0) && (index < s.Length))
  s = s.Substring(0, index) + c.ToString() + s.Substring(index + 1);

Способ 2. Использование оператора цикла.

// Способ 2. Использование цикла и дополнительной строки.
// Если значение index некорректно, то исходная строка не изменяется
// Исходные данные:
string s = "Hello world!"; // исходная строка
int index = 5; // индекс замены (нумеруется с 0)
char c = '+'; // символ замены

string s2 = ""; // дополнительная строка
for (int i = 0; i < s.Length; i++)
  if (i != index) s2 += s[i];
    else s2 += c;
  s = s2;

Способ 3. Использование методов Remove() и Insert(). В этом случае также нужно проверять индекс замены на корректность.

// Способ 3. Методы Insert(), Remove()
// Исходные данные:
string s = "Hello world!"; // исходная строка
int index = 5; // индекс в строке, где нужно сделать замену (нумеруется с 0)
char c = '+'; // символ замены

// Здесь нужно делать проверку на корректность значения pos,
// если index некорректен, то сгенерируется исключение
if ((index >= 0) && (index < s.Length))
{
  s = s.Remove(index, 1);
  s = s.Insert(index, c.ToString());
}