Skip to content

Commit ed3637b

Browse files
committed
Lesson 16
1 parent e3b1ba3 commit ed3637b

File tree

3 files changed

+151
-0
lines changed

3 files changed

+151
-0
lines changed

CSharpCourse.sln

+6
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lesson_014", "Lesson_014\Le
3535
EndProject
3636
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lesson_015", "Lesson_015\Lesson_015.csproj", "{513B6B56-6D69-41A8-A195-346465630C7A}"
3737
EndProject
38+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lesson_016", "Lesson_016\Lesson_016.csproj", "{B668F5CB-6090-4C85-8298-071910657B80}"
39+
EndProject
3840
Global
3941
GlobalSection(SolutionConfigurationPlatforms) = preSolution
4042
Debug|Any CPU = Debug|Any CPU
@@ -105,6 +107,10 @@ Global
105107
{513B6B56-6D69-41A8-A195-346465630C7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
106108
{513B6B56-6D69-41A8-A195-346465630C7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
107109
{513B6B56-6D69-41A8-A195-346465630C7A}.Release|Any CPU.Build.0 = Release|Any CPU
110+
{B668F5CB-6090-4C85-8298-071910657B80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
111+
{B668F5CB-6090-4C85-8298-071910657B80}.Debug|Any CPU.Build.0 = Debug|Any CPU
112+
{B668F5CB-6090-4C85-8298-071910657B80}.Release|Any CPU.ActiveCfg = Release|Any CPU
113+
{B668F5CB-6090-4C85-8298-071910657B80}.Release|Any CPU.Build.0 = Release|Any CPU
108114
EndGlobalSection
109115
GlobalSection(SolutionProperties) = preSolution
110116
HideSolutionNode = FALSE

Lesson_016/Lesson_016.csproj

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net8.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
</PropertyGroup>
8+
9+
</Project>

Lesson_016/Program.cs

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
using System.Text;
2+
3+
Console.WriteLine("-----------------String Length-----------------");
4+
5+
const string testStr = "I love C#!";
6+
7+
Console.WriteLine(testStr.Length); // 10 (длина строки, то есть, количество символов в ней)
8+
9+
//testStr.Length = 9; // Свойство "Length" доступно только для чтения
10+
11+
12+
Console.WriteLine("-----------------StringBuilder Length-----------------");
13+
14+
var strBuilder = new StringBuilder("I love C#!"); // Создание объекта "StringBuilder" с помощью конструктора
15+
16+
Console.WriteLine(strBuilder); // I love C#!
17+
Console.WriteLine(strBuilder.Length); // 10
18+
19+
strBuilder.Length = 6; // В объекте "StringBuilder" свойство "Length" доступно как на чтение, так и на запись
20+
21+
Console.WriteLine(strBuilder); // I love
22+
Console.WriteLine(strBuilder.Length); // 6
23+
24+
strBuilder.Length = 10;
25+
26+
Console.WriteLine(strBuilder); // I love
27+
Console.WriteLine(strBuilder.Length); // 10
28+
29+
30+
Console.WriteLine("-----------------String Indexer-----------------");
31+
32+
char firstSymbol = testStr[0]; // Получение первого символа
33+
Console.WriteLine(firstSymbol); // I
34+
35+
char lastSymbol = testStr[9]; // Получение 10-го символа
36+
Console.WriteLine(lastSymbol); // !
37+
38+
lastSymbol = testStr[^1]; // Получение последнего символа
39+
Console.WriteLine(lastSymbol); // !
40+
41+
//Console.WriteLine(testStr[10]); // System.IndexOutOfRangeException, так как символа с индексом 10 не существует
42+
43+
Console.WriteLine("-----------------StringBuilder Indexer-----------------");
44+
45+
strBuilder = new StringBuilder("I love C#!");
46+
47+
strBuilder[8] = '+'; // Меняем символ по индексу 8 на '+' (в объекте "StringBuilder" индексатор доступен как на чтение, так и на запись)
48+
Console.WriteLine(strBuilder); // I love C+!
49+
50+
strBuilder.Insert(9, '+'); // Вставляем символ '+' по индексу 9
51+
Console.WriteLine(strBuilder); // I love C++!
52+
53+
54+
Console.WriteLine("-----------------Substring-----------------");
55+
56+
Console.WriteLine(testStr[2..]); // love C#! (извлекаем подстроку, начиная с символа под индексом 2 и до конца исходной строки - то же самое, что и "testStr.Substring(2)")
57+
Console.WriteLine(testStr.Substring(2, 4)); // love (извлекаем подстроку, начиная с символа под индексом 2 и длинной в 4 символа)
58+
Console.WriteLine(testStr[2..6]); // love (извлекаем подстроку, начиная с символа под индексом 2 и заканчивая символом под индексом 6 не включительно)
59+
60+
61+
Console.WriteLine("-----------------Trim-----------------");
62+
63+
string strWithEdgeSpaces = "\t I love C#! \n";
64+
Console.WriteLine($"'{strWithEdgeSpaces}'");
65+
Console.WriteLine($"'{strWithEdgeSpaces.Trim()}'"); // 'I love C#!' (отсекаем пробельные символы в начале и в конце)
66+
67+
68+
Console.WriteLine("-----------------Split-----------------");
69+
70+
string[] words = "Hello, how are you?".Split(' '); // Разбиаем строку на подстроки по пробелу
71+
string[] chunks = "one, two, three".Split(','); // Разбиаем строку на подстроки по запятой
72+
73+
74+
Console.WriteLine("-----------------string.Empty-----------------");
75+
76+
string emptyStr = string.Empty; // Объявление пустой строки
77+
string emptyStr2 = ""; // То же самое, что и выше, но другим способом
78+
79+
Console.WriteLine(emptyStr == emptyStr2); // True (строки равны между собой посимвольно)
80+
Console.WriteLine(object.ReferenceEquals(emptyStr, emptyStr2)); // True (ссылки указывают на один и тот же объект в памяти)
81+
82+
// Использование пустой строки как стартовой точки при собирании конечной строки из нескольких частей
83+
// string target = "";
84+
// if ( /* something */ )
85+
// {
86+
// target += "something";
87+
// }
88+
// if ( /* something else */ )
89+
// {
90+
// target += "something else";
91+
// }
92+
93+
// Сделать что-то, если строка не пустая
94+
if (emptyStr != string.Empty)
95+
{
96+
// Do something
97+
}
98+
99+
100+
Console.WriteLine("-----------------string.IsNullOrEmpty-----------------");
101+
102+
string nullStr = null; // Присваивание строке значения "null"
103+
104+
Console.WriteLine(string.IsNullOrEmpty(emptyStr)); // True
105+
Console.WriteLine(string.IsNullOrEmpty(nullStr)); // True
106+
Console.WriteLine(string.IsNullOrEmpty(testStr)); // False
107+
108+
109+
Console.WriteLine("-----------------string.IsNullOrWhiteSpace-----------------");
110+
111+
Console.WriteLine(string.IsNullOrWhiteSpace(emptyStr)); // True
112+
Console.WriteLine(string.IsNullOrWhiteSpace(nullStr)); // True
113+
Console.WriteLine(string.IsNullOrWhiteSpace(" \t \n ")); // True
114+
Console.WriteLine(string.IsNullOrWhiteSpace(testStr)); // False
115+
116+
117+
Console.WriteLine("-----------------string.Join-----------------");
118+
119+
string[] cities = ["Moscow", "New York", "Paris", "London"]; // Объявление массива строк
120+
121+
string citiesString = string.Join(", ", cities); // Собираем массив в одну строку с разделителем ", "
122+
Console.WriteLine(citiesString); // Moscow, New York, Paris, London
123+
124+
125+
Console.WriteLine("-----------------ToString-----------------");
126+
127+
Display("Some string"); // Some string
128+
Display(strBuilder); // I love C++!
129+
Display(12); // 12
130+
131+
// Метод принимает объект типа "object", что означает, что в него можно передать объект любого типа,
132+
// так как все типы C# неявно наследуются от "object"
133+
static void Display(object input)
134+
{
135+
Console.WriteLine(input);
136+
}

0 commit comments

Comments
 (0)