CodeGym /Kurslar /C# SELF /string sinfinin qabaqcıl metodları

string sinfinin qabaqcıl metodları

C# SELF
Səviyyə , Dərs
Mövcuddur

1. Sətirdə substring axtarışı

Keçən mühazirədə sən sətirdən substring almağı öyrəndin. Bu dəfə isə bir sətirdə başqa bir sətiri necə tapmaq olar, onu öyrənəcəyik. Bunun üçün 5 möhtəşəm metod var:

Contains metodu: sətir substring-i saxlayır?

Əgər ötürülən sətir, metodu çağırdığın sətirdə varsa, true qaytarır.

string phrase = "Külək dəyişiklikləri";
bool hasWord = phrase.Contains("dəyişiklikləri"); // true
Contains ilə substring-in olub-olmadığını yoxlamaq

Axtarış registerə həssasdır! "külək".Contains("K")false.

IndexOf metodu: substring-in mövqeyini tapmaq

IndexOf massivlərdə necə işləyirsə, burada da eyni cür: sətirdə substring-i (başdan sona) axtarır və substring-in ilk tapıldığı indeksini qaytarır.

string text = "qarpızqarpız";
int index = text.IndexOf("rpız"); // 2
IndexOf ilə substring-in mövqeyini tapmaq
  • Əgər heç nə tapılmasa, -1 qaytarır.
  • Başlanğıc mövqeyi ilə alternativi var: IndexOf("rpız", 4). Hər şey massivlərdəki kimi.

LastIndexOf metodu: sonuncu tapılma

LastIndexOf massivlərdə necə işləyirsə, burada da eyni cür: sətirdə substring-i (sondan başa) axtarır və substring-in sondan ilk tapıldığı indeksini qaytarır.

string repeated = "tapşırıq tapşırıq";
int last = repeated.LastIndexOf("tapşırıq"); // 7
LastIndexOf ilə substring-in sonuncu tapılmasını tapmaq

Sətir müəyyən substring ilə başlayır/bitir?

Tez-tez yoxlamaq lazım olur ki, bizim sətir müəyyən substring ilə başlayır (və ya bitir). Bunun üçün iki metod var:

  • StartsWith — sətirin müəyyən substring ilə başladığını yoxlayır;
  • EndsWith — sətirin müəyyən substring ilə bitdiyini yoxlayır.
string fileName = "photo.jpg";
bool isJpg = fileName.EndsWith(".jpg"); // true

string email = "support@company.com";
bool isSupport = email.StartsWith("support"); // true
Sətirin başlanğıcını və sonunu yoxlamaq

Əgər registerə baxmadan müqayisə etmək istəyirsənsə, əlavə parametr kimi müqayisə rejimini ötürmək lazımdır (bax StringComparison.OrdinalIgnoreCase sənədinə).

2. Replace metodu: simvolları və substring-ləri əvəz etmək

Replace metodu bütün A sətirini B sətiri ilə əvəz edir. Əslində, bu metod səhvlərlə, senzura ilə və şablonlarda dəyişənləri əvəz etmək üçün yaradılıb! (Zarafat.)

string address = "London, Beyker-strit küçəsi";
string updated = address.Replace("London", "Paris");
Console.WriteLine(updated); // "Paris, Beyker-strit küçəsi"
Replace ilə substring-i əvəz etmək
  • Hətta ayrı-ayrı simvolları da əvəz etmək olar: str.Replace('a', 'y')
  • Vacibdir: bütün əvəzləmələr sətirin hər yerində baş verir, yalnız ilk tapılanda yox.

3. Split metodu: sətiri hissələrə bölmək

Split metodu belə işləyir: sənin sətirini götürür və onu hissələrə bölür, separator — yəni bölmək istədiyin simvol və ya sətirə görə. Metod nəticədə sətirlərin massivini qaytarır.

string[] parts = originalString.Split(separator);
Split metodunun sintaksisi
  • separator — separator kimi istifadə olunacaq simvol və ya simvollar massivi.

Ən sadə nümunə

Sətiri boşluq ilə bölək:

string input = "alma armud portağal banan";
string[] fruits = input.Split(' '); 	// ["alma","armud","portağal","banan"] massivini saxlayır
Console.WriteLine(fruits[0]); 			// "alma"
Console.WriteLine(fruits[1]); 			// "armud"

Burada biz 4 uzunluqlu sətirlər massivi əldə etdik, hər bir söz massivdə ayrıca elementdir.

Birkaç separator

Bəzən sətirdə bir neçə separator ola bilər. Məsələn, istifadəçi dəyərləri boşluq, vergül və ya nöqtəli vergül ilə ayıra bilər.

Belə hallarda separator simvollarının massivindən istifadə etmək olar:

string input = "alma, armud; portağal banan";
char[] separators = { ' ', ',', ';' };
string[] fruits = input.Split(separators, StringSplitOptions.RemoveEmptyEntries);

Bonus: opsional parametr StringSplitOptions.RemoveEmptyEntries boş hissələri silir. Bu, istifadəçi ardıcıl bir neçə separator daxil edəndə lazımdır — məsələn, iki boşluq və ya "alma,, armud" kimi bir şey.

Substring ilə bölmək

Separatorlar təkcə simvol yox, sətir də ola bilər. Məsələn, CSV faylında separator ";" və ya | olanda:

// Bir simvol ilə separator
string data = "İvanov;Pətrov;Sidorov";
string[] names = data.Split(';'); // ';' simvolu ilə

// Və ya separator tam sətirdirsə:
string log = "2024-01-01::Xəta::Tapşırığı yerinə yetirmək mümkün olmadı";
string[] separators = { "::" };
string[] parts = log.Split(separators);

4. Join metodu: sətirlər massivini yenidən birləşdiririk

Join metodu əksini edir: sətirlər massivini götürür və onları bir sətirə birləşdirir, elementlər arasına seçdiyin separatoru qoyur.

string result = string.Join(separator, arrayOfStrings);
Join metodunun sintaksisi
  • separator — elementlər arasında qoyulacaq sətir.
  • arrayOfStrings — sətirlər massivi və ya kolleksiyası (string[], List<string> və s.).

Ən sadə nümunə

Sətirlər massivindən vergüllə ayrılmış bir sətir düzəldək:

string[] items = { "alma", "armud", "portağal", "banan" };
string joined = string.Join(", ", items);
Console.WriteLine(joined); // "alma, armud, portağal, banan"
Join ilə sətirlər massivini birləşdirmək

Boş separatorla birləşdirmək — sətirləri birləşdiririk

Bəzən sadəcə sətirləri ardıcıl birləşdirmək istəyirsən, aralarına heç nə qoymadan:

string[] parts = { "Mən", "sevirəm", "C#" };
string message = string.Join("", parts);
Console.WriteLine(message); // "MənsevirəmC#"
Separator olmadan sətirləri birləşdirmək

5. Tipik səhvlər

Çox vaxt yeni başlayan proqramçılar Split metodundan sonra artıq boşluqları silməyi unudurlar. Məsələn, istifadəçi təsadüfən "alma, armud ,banan" yazıbsa, Split-dən sonra " armud " kimi elementlər alınacaq. Əgər dərhal ədədlərə çevirmək və ya müqayisə etmək istəsən, bug olacaq. Split-dən sonra hər element üçün Trim() istifadə et — bu yaxşı vərdişdir.

İkinci məsələ — artıq boş sətirlər. İstifadəçi ardıcıl iki separator daxil edəndə və ya sətirin əvvəlində və sonunda separator olduqda, Split boş elementlər qaytara bilər. StringSplitOptions.RemoveEmptyEntries istifadə et ki, sonradan səhvlər tutmayasan.

Əgər Join üçün massivdə boş elementlər və ya null varsa, Join onları sadəcə saymayacaq. Amma əgər sən bunu istəmirsənsə (məsələn, hesabatda bəzi dəyərlərin buraxıldığını göstərmək vacibdirsə), əvvəlcə massivi əl ilə emal etməlisən.

Və bir də: Split heç vaxt orijinal sətiri dəyişmir, yeni massiv qaytarır. Join da orijinal massivi dəyişmir, yeni sətir verir. Unutma: C#-da sətirlər və massivlər immutabledir (dəyişməzdir).

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION