C# – .Split fonksiyonu kullanımı

string.Split yöntemi, veri tabanında belirli işaretlere göre tek bir alanda tutmak istediğimiz kayıtları, bir veya daha fazla sınırlayıcı temelinde bölerek bir alt dizeler dizisi oluşturur. Genellikle bir dizeyi sözcük sınırlarında ayırmanın en kolay yoluymuş. Ayrıca, diğer belirli karakter veya dizelerde dizeleri ayırmak için de kullanılıyormuş

Split metodunun temel çalışma şekli şöyledir. Bir dizgeyi (karakter dizisi) belirli bir ayraç ile parçalayıp, parçalardan bir dizi döndürür.

Kullanım 1: C# string nesneleri ile kullanılır.  Aşırı yüklenmiş bir metottur fakat en sık kullanım şekli ayırıcı olarak bir karakter(char) girilmesi ile yapılır.

Kullanım 1.1
Kullanım 1.2
Kullanım 1 Çıktısı

Kullanım 2: C# split metodunun aşırı yüklenmiş bir metot olduğunu yazmıştım. Karakterlerden oluşan bir dizi ile birden fazla karakter ile de parçalamak mümkündür.

Örnek: 2019/12/07 18:06 şeklindeki tarihi parçalara ayırma

Kullanım 2
Kullanım 2 Çıktısı

Hatalar

  • Saati 18.06 şeklinde yazdığım ve ayrac dizisine . (nokta) elemanını eklemediğim için kodu yazdıramadım. Hata verdi. Aslında kod yazmayı bitirip derlendiğinde bir hata görünüyor fakat çalıştırmak istediğimizde özel bir hata oluşuyor. Syntax hatası olmamamsı kodun doğru olduğunu göstermez. Bu özel hata ile ilgili daha fazla detay isterseniz şu linkteki yazıyı inceleyebilirsiniz: https://docs.microsoft.com/tr-tr/dotnet/api/system.indexoutofrangeexception?view=netframework-4.8

Bu yazıyı yazarken yararlandığım kaynaklar:

C# – Challenges | First Factorial

Challenge Türü: Easy

Detaylar

Kodumuz

Kodun Çıktısı

Hatalar

  • 10. satırda tanımladığımız result değişkeni for döngüsünün dışında tanımlanmalı (örn. 7. satırda) çünkü for döngüsünün amacı bu değeri her seferinde yeni elde ettiğimiz değeriyle değiştirerek i ile çarpmak. (Sistem, [result*i=result] 1*1=1 1*2=2 2*3=6 6*4=24 şeklinde işliyor)
  • Aynı zamanda bu tanımlanacak result değişkenine bir ilk değer ataması yapılmalı yoksa null değeri döndürür (bildiğim kadarıyla?) ve bu atanacak ilk değer 1 olmalı ki çarpım işlemi yapıldığında ilk olarak kendisini versin. Örneğin 0 değeri atanırsa bu result değişkeni sürekli 0 değeri olarak kalır çünkü 0 ile çarpılan her sayı yine 0 değerini verir.
  • 12. satırda kendi yaptığım bir hatayı koyuyorum. Hızlı bir şekilde yazarken i yerine 1 yazmıştım. Fakat for döngüsünün içerisinde i‘ yi tanımlamamızın sebebi onu döngüyü çevirmesi amacıyla kullanmak zaten. i yerine 1 yazdığımız zaman result değerini sürekli olarak 1 ile çarpmış ve hep aynı sonucu elde etmiş oluruz. Burada result değişkeninin değeri 1 olduğu için sonuç her zaman result*1=1 olur.
  • 15. satırda num değil de result değişkenini yazmalıyız çünkü biz FirstFactorial metodunda result değişkenini döndürüyoruz ve Main metoduna bu değişkeni yolluyoruz. num ise bizim parametremizdir. Yani Main metodundan aldığımız değişken.
  • 20. satırda, kullanıcıdan aldığımız değeri C# dilini kullanarak yazdığımız kodda ve Main metodundan aldığımız için string türünde alıyoruz ve bunu FirstFactorial metoduna yollarken, işlem yaptırmak için vs. integer türünde yolluyoruz. Bunun için de Convert.ToInt32 gibi bir dönüştürücü kullanmamız gerekir.

Wow – Code Worth Checking | Come Look Here

Coderbyte platformunda bu kodu yazarken faktöriyel kodlarını inceliyordum ve bir kullanıcının yazdığı şu koda denk geldim. Aslında inceleyince gayet basit bir mantıkla yazılmış ve daha kısa, pratik görünüyor. İncelemeye, öğrenmeye değer bir kod olduğunu düşünüyorum. Ufku genişletmek için farklı bir bakış açısı olur en azından.

C# – Challenges | First Reverse

Bugün “Challenges | … ” başlıklı bir seriye başlamayı düşünüyorum. Coderbyte isimli kodlama değerlendirme platformundaki meydan okumalar bu seride olacak. C# öğrendiğim için istenilen kodları C# dilinde yazacağım. Yeni diller öğrendikçe bu diller değişebilir. Bu serinin ilk uygulaması “First Reverse” isimli challenge. Bu cahllenge’ın temel mantığı dizi elemanlarını / ekrandan girilen değişkenleri ters sıra ile yazdırma. ASlında daha önceki yazımda olan bir kod fakat buna rağmen kodu yazaken zorluk çektim. Hala öğrenememişim…

Challenge Türü: Easy

Detaylar

Kodumuz

  • 9. satırda reverse değişkenine bir ilk atama yapmayı unuymamalıyız. ( Burada string a = String.Empty; , string a = Null; veya string a = “”; kullanabiliriz.
  • 11. satırda for föngüsünün içerisini mutlaka (int i = str.Length – 1; i >= 0; i–) şeklinde yazmalıyız. (int i = str.Length; i > 0; i–) veya (int i = 0; i <= str.Length -1; i++) şeklinde yazmamız yanlış olur.
  • 13. satırda a değikenine i yi ekleyip devam etmek değil de i nin dizi içerisinde ifade ettiği değişkenin değerini ekleyip atamayı unutmamalıyız. (yani a += i; yazmamalıyız.) Ayrıca a = str[i]; gibi bir hata da yapmamalıyız.

Kodun Çıktısı

Hatalar

  • 11. satırda döngüyü döndürmeye sağlayacak olan int i değişkenine 0 değerini verip artırarak ilerlemek istiyor olabiliriz fakat bunu yaparken int i değişkeni ile string reverse değişkenlerini kıyaslayamayız. Türleri eşit olmalı. for (int i = 0; i <= str.Length -1; i++) veya for ( int i = str.Length -1; i >= 0; i–) yazabiliriz.
  • 11. satırda veya mutlaka for ( int i = str.Length -1; i >= 0; i–) şeklinde yazmalıyız. for (int i = 0; i <= str.Length -1; i++) şeklinde yazdığımızda kodun çıktısı yukarıdaki gibi olur. İçindeki harfleri ters çevirip yeni bir dizi oluşturmasını istediğimiz diziyi ters çevirmez. Ayrıca for (int i = 0; i < str.Length; i++) şeklinde de yazmamalıyız. Bu şekilde de hata veriyor (idk why?).
  • 13. satırda for döngüsünün içinde i‘ nin değerini direkt olarak reverse isimi string değişkene ekleyemeyiz çünkü burada i değişkeni bizim değişkenimizin değerini etkilemek / değiştirmek için kullanılmıyor. i değişkeninin kullanılma amacı reverse isimli string değişkenini bir diziye dönüştürüp bu dizinin her bir elemanının sırasını temsil etmektir. bu sayede i. eleman şudur i+1. eleman şudur gibi dizinin elemanlarını tersten yazdırmamız mümkün olacaktır.

String.Empty , “” ve Null Arasındaki Fark

İnternette araştırdığım bir kodda, bir string değişkenine şu şekilde atama yapıldığını gördüm,

string reverse = String.Empty;

daha önce karşılaşmadığım için internetten ne olduğuna baktım. Şimdi de sizlere bu edindiğim bilgileri aktarmak istiyorum.

String.Empty veya “” kullandığımız zaman aynı boş string değerini elde etmemize rağmen aralarında bir fark vardır.

  • String.Empty ile aslında bellekte herhangi bir nesne yaratmayıp sadece String altındaki Empty alanına (field) a referans vermektedir.
  • Sting a = “”; ile ise boş değerli (empty) yeni bir string nesnesi bellekte “yaratılmış” olmaktadır.

String a = null; da yine String.Empty gibi uzunluğu “sıfır” olan bir stringi represent (temsil) etmekte olup kendisine “null” değeri atanmış olup, henüz kendisinin refere ettiği bir string örneklemi bulunmadığını belirtmektedir. Not: Hatta .NET Framework bu iki durumu aynı method ile geliştiricilerin kontrol edebilmesi için String.IsNullOrEmpty methodunu barındırmaktadır.

Kaynak: Onur Güzel’in yanıtından alıntılanıp düzenlenmiştir. https://social.msdn.microsoft.com/Forums/tr-TR/28d5f5a0-bb39-4bc1-aace-6f18976964fa/stringempty-quotquot-null-arasndaki-fark-nedir?forum=csharptr