Clear        


                
                    // string data type (string veri tipi)

using _14_String.Demos;
using System.Globalization;

namespace _14_String
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // string metinsel verileri tutumak için kullanılır, karakter dizisidir (char[]), referans tiptir.
            // tüm string methodları büyük küçük harf duyarlıdır.



            #region Karakter Dizisi, Concatenation ve Format (Metinsel Verileri Ard Arda Ekleme ve Formatlama)
            string sehir1 = "Ankara";
            Console.WriteLine(sehir1[0]); // konsola A yazdırır
            foreach (char s in sehir1) // konsola Ankara yazdırır
            {
                Console.Write(s);
            }

            // Bir metinsel veriyi tersine çevirme:
            Console.WriteLine();
            string word = "YAZILIM";
            string reversedWord = ""; // içinde hiç bir karakter olmayan (boş) metinsel veri
            for (int i = 6; i >= 0; i--) // 6: karakter sayısı - 1 = son index
            {
                reversedWord += word[i];
            }
            Console.WriteLine(reversedWord); // konsola MILIZAY yazdırır

            string sehir2 = "İstanbul";
            string sehir3 = sehir1 + " " + sehir2; // string concatenation (metinsel verileri ard arda ekleme)
            Console.WriteLine(sehir3); // konsola "Ankara İstanbul" yazdırır

            string sehir4 = string.Format("{0} {1}", sehir2, sehir1); // {0} ve {1} placeholder (yer tutucu), {0}: İstanbul, {1}: Ankara olacak
            Console.WriteLine(sehir4); // konsola "İstanbul Ankara" yazdırır

            string sehir5 = "İzmir";
            Console.WriteLine($"Ege'nin incisi: {sehir5}"); // konsola "Ege'nin incisi: İzmir" yazdırır
                                                            // placeholder'lar yerine string verinin başına $ eklenerek istenilen değişkenler süslü parantez içerisine gönderilebilir
            #endregion



            #region Length (Metinsel Veri Karakter Sayısı) ve Replace (Değiştirme) Methodu
            string isim1 = "Çağıl Alsaç";
            int isim1Length = isim1.Length; // string tipindeki verinin karakter sayısını (uzunluğunu) dönen özellik
            Console.WriteLine(isim1Length); // konsola 11 yazdırır

            string isim2 = isim1.Replace("Çağıl", "Leo");
            Console.WriteLine(isim2); // konsola "Leo Alsaç" yazdırır
            #endregion



            #region StartsWith (Başlayan), EndsWith (Biten) ve Contains (İçeren) Methodları
            string isim3 = "Bill Gates";

            // bu üç method da case sensitive (büyük küçük harf duyarlı) ve bool sonuç döner

            if (isim3.StartsWith("B")) // eğer parametre "b" olsaydı StartsWith methodu false dönecekti,
                                       // bu örnekte true dönecek ve konsola "İsim B ile başlıyor." yazdıracak
                Console.WriteLine("İsim B ile başlıyor.");
            else
                Console.WriteLine("İsim B ile başlamıyor.");

            Console.WriteLine(isim3.EndsWith("Jobs") ? "İsim Jobs ile bitiyor." : "İsim Jobs ile bitmiyor."); // konsola "İsim Jobs ile bitmiyor." yazdırır

            if (isim3.Contains("ga")) // konsola "İsim ga içermiyor." yazdırır
                Console.WriteLine("İsim ga içeriyor.");
            else
                Console.WriteLine("İsim ga içermiyor.");

            if (isim3.Contains("ate"))  // konsola "İsim ate içeriyor." yazdırır
                Console.WriteLine("İsim ate içeriyor.");
            else
                Console.WriteLine("İsim ate içermiyor.");
            #endregion



            #region IndexOf (İçerdiği Metin Index'i) ve LastIndexOf (İçerdiği Metin Son Index'i) Methodları
            // Bir metinsel veride girilen karakterin tekil olup olmadığını (bir karakter mi, birden çok karakter mi) bulma:
            Console.Write("Kelime: ");
            string kelime = Console.ReadLine();
            Console.Write("Tekil olup olmadığı bulunacak harf: ");
            string harf = Console.ReadLine();
            int harfIndex = kelime.IndexOf(harf); // kelimenin ilk harfinden başlayarak girilen harfi bulduğu index'i döner
            int harfLastIndex = kelime.LastIndexOf(harf); // kelimenin ilk harfinden başlayarak girilen harfi bulduğu son index'i döner
            if (harfIndex == -1) // IndexOf ve LastIndexOf methodları bir string içerisinde bir karakter veya başka bir string'i bulamazsa -1 döner
                Console.WriteLine("Kelimede harf bulunamadı.");
            else if (harfIndex == harfLastIndex)
                Console.WriteLine("Harf kelimede tekildir.");
            else
                Console.WriteLine("Harf kelimede tekil değildir.");
            // ankara kelimesi için a harfi girilirse IndexOf methodu: 0, LastIndexOf methodu 5 döner, eşit olmadıkları için harf tekil değildir
            // ankara kelimesi için r harfi girilirse IndexOf methodu: 4, LastIndexOf methodu 4 döner, eşit oldukları için harf tekildir
            #endregion



            #region Insert (Ekleme) ve Remove (Çıkarma) Methodları
            string mesaj = "Dünya";
            mesaj = mesaj.Insert(5, "!");
            Console.WriteLine(mesaj); // "Dünya" sonuna 5. index üzerinden "!" ekler ve konsola "Dünya!" yazdırır
            mesaj = mesaj.Insert(0, "Merhaba ");
            Console.WriteLine(mesaj); // "Dünya!" başına 0. index üzerinden "Merhaba " ekler ve konsola "Merhaba Dünya!" yazdırır
            mesaj = mesaj.Insert(8, "Güzel ");
            Console.WriteLine(mesaj); // "Merhaba Dünya!" içerisine 8. index üzerinden "Güzel " ekler ve konsola "Merhaba Güzel Dünya!" yazdırır

            mesaj = mesaj.Remove(8, 6);
            Console.WriteLine(mesaj); // "Merhaba Güzel Dünya!" içerisinde 8. index'ten başlayıp 6 karakteri çıkarır ve konsola "Merhaba Dünya!" yazdırır
            mesaj = mesaj.Remove(7);
            Console.WriteLine(mesaj); // "Merhaba Dünya!" içerisinde 7. index'ten başlar ve sona kadar tüm karakterleri çıkarır, konsola da "Merhaba" yazdırır
            #endregion



            #region Substring Methodu
            // bir string (karakter kümesi) içerisinde bulunan herhangi bir alt string'i (alt karakter kümesini) bulmak için kullanılır

            // Bir abone numarası üzerinden abone tipi, bina ve daire numaralarını bulma:
            // Örnek abone numarası: A123456-7; Abone tipi: A (bireysel), B (kurumsal); Bina numarası: 123456; Daire numarası: 7
            Console.Write("Abone numarası giriniz: ");
            string aboneNo = Console.ReadLine();
            string aboneTipi = aboneNo.Substring(0, 1) == "A" ? "Bireysel" : "Kurumsal"; // 0. index'ten başla 1 karakter al
            string binaNo = aboneNo.Substring(1, 6); // 1. index'ten başla 6 karakter al
            string daireNo = aboneNo.Substring(8); // 8. index'ten başla sona kadar tüm karakterleri al
            Console.WriteLine($"Abone Tipi: {aboneTipi}, Bina No: {binaNo}, Daire No: {daireNo}"); // konsola örnek üzerinden "Abone Tipi: Bireysel, Bina No: 123456, Daire No: 7" yazdırır
            #endregion



            #region ToLower (Tüm Harfleri Küçültme) ve ToUpper (Tüm Harfleri Büyültme) Methodları
            string ulke = "Türkiye";
            Console.WriteLine($"Tümü küçük harf: {ulke.ToLower()}, tümü büyük harf: {ulke.ToUpper()}"); // konsola "Tümü küçük harf: türkiye, tümü büyük harf: TÜRKİYE" yazdırır
            #endregion



            #region Split (Parçalama) Methodu
            // Bir cümleyi boşluk karakterine göre kelimelerine parçalama:
            Console.Write("Cümle giriniz: ");
            string cumle = Console.ReadLine();
            string[] kelimeler = cumle.Split(' '); // cumle verisini boşluk karakterine göre parçalar ve geriye bir string dizisi döner
            for (int i = 0; i < kelimeler.Length; i++) // Çağıl Alsaç örneği için konsola alt alta "1. kelime: Çağıl", "2. kelime: Alsaç" yazdırır
            {
                Console.WriteLine((i + 1) + ". kelime: " + kelimeler[i]);
            }
            #endregion



            #region Equals (Eşitlik) Methodu
            // Equals methodu sadece string için değil diğer veri tipleri için de kullanılabilir
            string test1 = "Test1";
            string test2 = "Test2";

            if (test1.Equals(test2)) // konsola "Test1 eşit değildir Test2" yazdırır
                Console.WriteLine($"{test1} eşittir {test2}");
            else
                Console.WriteLine($"{test1} eşit değildir {test2}");

            // Equals methodu yerine eşitlik operatörü kullanmak daha uygundur
            test2 = "Test1";
            if (test1 == test2) // konsola "Test1 eşittir Test2" yazdırır
                Console.WriteLine($"{test1} eşittir {test2}");
            else
                Console.WriteLine($"{test1} eşit değildir {test2}");
            #endregion



            #region Escape Sequences (Metinsel Veri İçerisinde Kaçış Karakterleri Kullanımı)
            string ad = "Çağıl";
            string soyad = "Alsaç";
            string escapeSequenceSonucu;

            // \" (çift tırnak) kullanımı:
            escapeSequenceSonucu = "\"" + ad + "\""; // "Çağıl"
            Console.WriteLine(escapeSequenceSonucu); // konsola "Çağıl" (çift tırnak içerisinde) yazdırır

            // \n (yeni satır) kullanımı:
            escapeSequenceSonucu = ad + "\n" + soyad;
            Console.WriteLine(escapeSequenceSonucu); // konsola Çağıl yazdırdıktan sonra \n ile alt satıra geçerek Alsaç yazdırır

            // \r (satır başı) kullanımı: genelde \n ile birlikte kullanılır, eğer alt satıra geçildiğinde satır başından devam etmiyorsa ihtiyaca göre kullanılabilir
            escapeSequenceSonucu = ad + "\r\n" + soyad;
            Console.WriteLine(escapeSequenceSonucu); // konsola Çağıl yazdırdıktan sonra \n ile alt satıra geçerek ve \r ile de satır başına giderek Alsaç yazdırır

            // \t (tab) kullanımı:
            escapeSequenceSonucu = ad + "\t" + soyad;
            Console.WriteLine(escapeSequenceSonucu); // konsola \t ile belli bir miktar boşluk bırakarak "Çağıl  Alsaç" yazdırır

            // \\ (ters slash) kullanımı:
            string dosyaYolu1 = "C:\\Users\\Cagil\\cv.docx";
            Console.WriteLine(dosyaYolu1); // konsola "C:\Users\Cagil\cv.docx" yazdırır
            string dosyaYolu2 = @"C:\Users\Cagil\cv.docx"; // bu kullanım daha çok tercih edilir
            Console.WriteLine(dosyaYolu2); // konsola "C:\Users\Cagil\cv.docx" yazdırır

            // \' (tek tırnak) kullanımı:
            char karakter = '\'';
            Console.WriteLine(karakter); // konsola ' yazdırır
            #endregion



            #region Trim, TrimStart ve TrimEnd (Karakter Traşlama) Methodları
            string tamAd = " Çağıl Alsaç   ";
            Console.WriteLine("\"" + tamAd + "\""); // konsola " Çağıl Alsaç   " yazdırır
            Console.WriteLine("\"" + tamAd.Trim() + "\""); // konsola "Çağıl Alsaç" yazdırır, baştaki ve sondaki boşluk karakterlerini temizler
            Console.WriteLine("\"" + tamAd.TrimStart() + "\""); // konsola "Çağıl Alsaç   " yazdırır, baştaki boşluk karakterlerini temizler
            Console.WriteLine("\"" + tamAd.TrimEnd() + "\""); // konsola " Çağıl Alsaç" yazdırır, sondaki boşluk karakterlerini temizler

            string diller = "C#, Java, Python, ";
            string trimlenmisDiller = diller.TrimEnd(',', ' '); // Trim methodları ile birden çok karakter parametre olarak kullanılarak karakterlerin temizlenme işlemi yapılabilir
            Console.WriteLine(trimlenmisDiller); // konsola "C#, Java, Python" yazdırır
            #endregion



            #region ToString Methodu (Değer tip verilerinin string karşılıklarını, string dışındaki referans tip verilerinin ise tiplerini dönen method)
            int ogrenciNo = 123456;
            string ogrenciNoYazi = ogrenciNo.ToString(); // int tipindeki ogrenciNo'nun string karşılığını ("123456") oluşturur ve ogrenciNoYazi değişkenine atar
            Console.WriteLine(ogrenciNoYazi); // konsola 123456 yazdırır

            bool dogruMu = true;
            Console.WriteLine(dogruMu.ToString()); // bool tipindeki dogruMu'nun string karşılığını ("True") oluşturur ve konsola True yazdırır

            int[] sayilar = new int[] { 1, 2, 3 };
            Console.WriteLine(sayilar.ToString()); // sayilar referans tip olduğu için konsola System.Int32[] yazdırır yani ToString methodu değişkenin tipini döner
            #endregion



            #region PadLeft ve PadRight Methodları
            int ajanNo = 7;
            string ajanNoYazi = ajanNo.ToString().PadLeft(3, '0'); // ajanNo string'inin soluna eğer string tek karakterse 2 tane 0 ekleyerek,
                                                                   // iki karakterse 1 tane 0 ekleyerek, 3 karakterse 0 eklemeden toplam karakter sayısını 3'e tamamlar (007) 
            Console.WriteLine(ajanNoYazi); // konsola 007 yazdırır

            string saat = "18";
            Console.WriteLine(saat.PadLeft(2, '0')); // saat iki karakter olduğundan ve PadLeft methodunda iki karaktere '0' ile tamamla dediğimiz için konsola 18 yazdırır
            saat = "6";
            Console.WriteLine(saat.PadLeft(2, '0')); // saat tek karakter olduğundan ve PadLeft methodunda iki karaktere '0' ile tamamla dediğimiz için konsola 06 yazdırır

            string message = "To be continued"; // length: 15
            Console.WriteLine(message.PadRight(18, '.')); // sona üç nokta eklemek için 18 karaktere '.' ile tamamlayarak konsola "To be continued..." yazdırır
            #endregion



            #region Sayısal Tipteki Verileri ToString veya Format Methodları ile Formatlama
            double sayi1 = 12.34;
            string formatlanmisSayi1;

            // ToString methodunun ilk parametresi sayı formatıdır (N: Number).
            // 0 sayının kaç hane üzerinden yuvarlanarak formatlanacağını belirtir.
            // Yuvarlama işleminde 0 ondalık haneye göre yuvarla dediğimiz için 3'e göre yuvarlama yapılır.
            // Sonuç olarak 5'ten küçük haneler aşağı yuvarlanır ve "12" elde edilir.
            // Para biriminde formatlama için N yerine C: Currency kullanılır.
            // ToString methodunun ikinci parametresi kültür (bölge) ayarıdır, örneğin tr-TR Türkçe, en-US ise İngilizce için kullanılabilir.
            formatlanmisSayi1 = sayi1.ToString("N0", new CultureInfo("tr-TR"));
            Console.WriteLine("Türkçe 0 ondalık haneli aşağı yuvarlanarak formatlanmış sayı 1: " + formatlanmisSayi1);

            // Yuvarlama işleminde 1 ondalık haneye göre yuvarla dediğimiz için 4'e göre yuvarlama yapılır.
            // Sonuç olarak 5'ten küçük haneler aşağı yuvarlanır ve para birimine göre formatla dediğimiz için "$12.3" elde edilir.
            formatlanmisSayi1 = sayi1.ToString("C1", new CultureInfo("en-US"));
            Console.WriteLine("İngilizce 1 ondalık haneli aşağı yuvarlanarak para biriminde formatlanmış sayı 1: " + formatlanmisSayi1);

            double sayi2 = 123.456;
            string formatlanmisSayi2;

            // Format methodunun ilk parametresi kültür (bölge) ayarıdır.
            // Format methodunun ikinci parametresi sayı formatıdır (N: Number).
            // 1 sayının kaç hane üzerinden yuvarlanarak formatlanacağını belirtir.
            // 0,7 ise baştan itibaren virgül dahil kaç hane padding left (sağa hizalama) yapılacağını belirtir.
            // Yuvarlama işleminde 1 ondalık haneye göre yuvarla dediğimiz için 5'e göre yuvarlama yapılır.
            // Sonuç olarak 5 ile 5'ten büyük haneler yukarı yuvarlanır ve padding left yaptığımızdan virgül dahil toplam 7 haneli "  123,5" elde edilir.
            // Para biriminde formatlama için N yerine C: Currency kullanılır.
            // Format methodunun üçüncü parametresi formatlanmak istenen değişkendir.
            formatlanmisSayi2 = string.Format(new CultureInfo("tr-TR"), "{0,7:N1}", sayi2);
            Console.WriteLine("Türkçe 1 ondalık haneli yukarı yuvarlanarak formatlanmış sayı 2: \"" + formatlanmisSayi2 + "\"");

            // Yuvarlama işleminde 2 ondalık haneye göre yuvarla dediğimiz için 6'ya göre yuvarlama yapılır.
            // Sonuç olarak 5 ile 5'ten büyük haneler yukarı yuvarlanır ve para birimine göre formatla dediğimiz için padding left de yapmadığımızdan "$123.46" elde edilir.
            formatlanmisSayi2 = string.Format(new CultureInfo("en-US"), "{0:C2}", sayi2);
            Console.WriteLine("İngilizce 2 ondalık haneli yukarı yuvarlanarak para biriminde formatlanmış sayı 2: \"" + formatlanmisSayi2 + "\"");
            #endregion



            #region Demos
            AdamAsmaca.Calistir();
            KelimeIlkHarfBuyukDigerleriKucuk.Calistir();
            SayiBasamaklari.Calistir();
            SehirArama.Calistir();
            CumledeKelimeArama.Calistir();
            ListedeIsimArama.Calistir();
            ListedeIsimAramaVeBulunanlariListeleme.Calistir();
            TcKimlikNoDogrulama.Calistir();
            SesliSessizHarfBulma.Calistir();
            TurkceHarfleriIngilizceyeDonusturme.Calistir();
            MulakatSorusu2.Calistir();
            CumledeEsAnlamliKelimeleriDegistirme.Calistir();
            #endregion
        }
    }
}