Memik Yanık - Kişisel Web Sitesi Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS RSS | İletişim

9. BÖLÜM : STRING İŞLEMLERİ VE MATH SINIFI(*)


Bu bölümde C# ile program geliştirirken gerek duyacağınız bazı metotlar hakkında bilgi verilecektir. Bu bölümde anlatılan metotların çoğunluğu string bilgiler üzerinde işlem yapılırken kullanılan metotlardır. String bilgiler üzerinde işlem yapılırken kulllanılan bu metotlar String sınıfında tanımlıdır. 

Değişkenler hakkında bilgi verilen bölümden bildiğiniz gibi karaktersel değişkenler string anahtar kelimesi ile tanımlanmaktadır. Aşağıda verilen kodda 2 string değişken tanımlanıp bu değişkenlerden ilkine tanımlama satırında, diğerine ise sonradan bilgi aktarılmaktadır. 

string sehir ="Ankara";
string takim;
takim = "Gençlerbirliği"; 

String değişkenleri bu şekilde tanımlamak yerine String sınıfının yapıcı metotlarından yararlanabilirsiniz. İlk olarak String sınıfının char tipindeki diziyi parametre olarak alan yapıcı metodunu kullanıp string değişken tanımlayacağız. 

private void Form1_Click(object sender, EventArgs e) 
 
   char[] Dizi = {'A', 'n', 'k', 'a', 'r', 'a'}; 
   System.String Str; 
   Str = new System.String(Dizi); 
   textBox1.Text = Str; 
 

Bu kod işletildiğinde char tipindeki dizi değişkenin içeriği string’e, oradan TextBox’a aktarılır. Değişkenler adlı bölümde string değişkenleri tanımlarken kullanılan anahtar kelimenin ilk harfi küçüktü. Ancak System adlı namespace’ki String sınıfının ilk harfi büyüktür. System namespace’in kaynaklarından yararlanacağınızı using deyimiyle belirttiyseniz bu kodu aşağıdaki gibi yazabilirsiniz. 

private void Form1_Click(object sender, EventArgs e) 
 
    char[] Dizi = {'A', 'n', 'k','a','r', 'a'}; 
    String Str; 
    Str = new String(Dizi); 
    textBox1.Text = Str; 
 

String sınıfının yapıcı metoduna parametre olarak verdiğiniz char dizi değişkenin bütün elemanları yerine belli sayıdaki elemanlarını string değişkene aktarmak istiyorsanız yapıcı metodun 2. ve 3. parametresinden yararlanabilirsiniz. Bu kod aşağıdaki gibi düzenlenirse string değişkene char değişkenin 3. karakterinden başlamak üzere 4 elemanı aktarılır. 

Str = new String(Dizi, 2, 4); 

Empty Özelliği 

Tanımlayıp değer aktardığınız string değişkenin içeriğini boşaltmak istiyorsanız Empty özelliğinden yararlanabilirsiniz. Bu özelliğin nasıl kullanıldığını aşağıda görebilirsiniz. 

string takim = "Gençlerbirliği";
textBox1.Text = takim;
takim = string.Empty;
textBox2.Text = takim; 

Empty özelliği sayesinde boşluk elde edildiği için bu koddaki 3. satırda “takim” değişkenin içeriği temizlenmiş olur. Empty özelliği sayesinde değişkenlerin içerikleri boşaltıldığı gibi TextBox’ların içerikleri aşağıda yapıldığı gibi boşaltılabilinir. 

textBox1.Text = string.Empty;
textBox2.Text = string.Empty; 

String değişkenin içeriğinin boş veya null olup olmadığını öğrenmek istiyorsanız String sınıfının IsNullOrEmpty() metodunu kullanabilirsiniz. Bu metot kendisine parametre olarak verilen değişken null veya uzunluğu 0 ise geriye true göndermektedir. 

string takim = null;
if (String.IsNullOrEmpty(takim)) 
   MessageBox.Show("Bu değişken null veya boş"); 

Bu kodda IsNullOrEmpty() metoduna parametre olarak verilen string değişken null olduğu için geriye true gönderir. Aşağıda ise bu değişkenin içeriğini Empty özelliği ile boşalttıktan sonra bu metoda parametre olarak verdik. 

     
string takim = "Fenerbahçe"; 
      takim = String.Empty; 
      if (String.IsNullOrEmpty(takim)) 
         MessageBox.Show("Bu değişken null veya boş"); 

IsNullOrEmpty() metodu olmasaydı aşağıdaki gibi kod yazıp aynı kontrolü yapabilirdiniz. 

string takim = null;
if (takim==null || takim.Length ==0) 
  MessageBox.Show("Bu değişken null veya boş"); 

Copy ve Clone Metotları 

string değişkenin kopyasını hazırlamak istiyorsanız String sınıfının Copy() metodundan yararlanabilirsiniz. Copy() metodu parametre olarak aldığı string değişkenin veya karaktersel bilginin kopyasını geriye göndermektedir. Aşağıda verilen kod işletildiğinde formdaki her 2 TextBox’a da aynı bilgi aktarılır. 

string takim = "Gençlerbirliği";
textBox1.Text = takim;
textBox2.Text = string.Copy(takim);   

Karaktersel değişken veya bilgilerin kopyasını alırken Clone() metodundan yararlanabilirsiniz. Clone() metodunun nasıl kullanıldığını aşağıda görebilirsiniz. Bu 2 satırı bir metoda yazıp işletirseniz “takim” değişkenin içeriği TextBox’a aktarılır. 

string takim = "Gençlerbirliği";
textBox1.Text = Convert.ToString(takim.Clone()); 

Len() Metodu ve Length Özelliği 

C# projelerinde Visual Basic kaynaklı metotları kullanmak istiyorsanız Microsoft.VisualBasic referansını Solution Explorer penceresinde listelenmesini sağlamalısınız. Visual Basic’in Len() metodu kendisine parametre olarak verilen bilginin uzunluğunu bulmaktadır. Len() metoduna karaktersel bir sabit veya karaktersel bilgi içeren bir değişkeni parametre olarak verirseniz geriye bilgideki karakter sayısı gönderilir. 

string Takim = "Beşiktaş";
int uzunluk =Microsoft.VisualBasic.Strings.Len(Takim);      //uzunluk 8 olur
uzunluk=Microsoft.VisualBasic.Strings.Len("Beşiktaş"); //uzunluk 8 olur 

Len() metodu ile istenen tipteki bilgiler hakkında bilgi edinilebilir. Değişik bilgilerin bellekte kapladıkları yer miktarını öğrenirken Len() metodunu aşağıdaki gibi kullanabilirsiniz. 

private
void Form1_Click(object sender, EventArgs e) 
 
    short yil = 0; 
    int sayi = 0; 
    long maas = 0; 
    float pi = 0; 
    int uzunluk = Microsoft.VisualBasic.Strings.Len(yil); 
    textBox1.Text = Convert.ToString(uzunluk); 
    uzunluk = Microsoft.VisualBasic.Strings.Len(sayi); 
    textBox2.Text = Convert.ToString(uzunluk); 
    uzunluk = Microsoft.VisualBasic.Strings.Len(maas); 
    textBox3.Text = Convert.ToString(uzunluk); 
    uzunluk = Microsoft.VisualBasic.Strings.Len(pi); 
    textBox4.Text = Convert.ToString(uzunluk);    
   } 

Bu metodun başında short, int, long ve float tipinde 4 değişken tanımladık ve bu değişkenlerin hepsine 0 aktardık. Değişkenler hakkında bilgi verilen bölümde değişik tipteki değişkenlerin bellekte değişik miktarda yer kapladığı belirtilmişti. Yukarıda verilen kod işletilirse aşağıdaki gibi bir sonuç alınır.


Len() metoduna parametre olarak int bir değişken verilirse geriye 4 gönderilir. Long değişkenler bellekte 8 byte yer kapladığı için Len() metodu long tipli bir değişken parametre olarak verilirse geriye 8 gönderilir. Alabilecekleri en büyük değer 32767 olan Short değişkenler bellekte 2 byte yer kaplamaktadır. 

Uzunluğunu öğrenmek istediğiniz bilgi karaktersel ise Len() yerine String sınıfının Length özelliğine bakabilirsiniz. Length özelliğinin nasıl kullanıldığını aşağıda görebilirsiniz. 

string
telefon = "0-312-435 30 30";
int uzunluk = telefon.Length; 
textBox4.Text = Convert.ToString(uzunluk);    

Şimdi hazırlayacağımız örnek ile karaktersel bir bilgideki boşlukların sayısını öğreneceğiz. Bu amaçla projenin formunu aşağıdaki gibi düzenledik.



Boşluk sayısı öğrenilmek istenen bilgi TextBox’a yazılıp “Boşluk Say” düğmesi tıklanacak. Bu düğme tıklandığı zaman işletilmek üzere aşağıda verilen kodu hazırladık.



Bu kodda ilk TextBox’a yazılan bilginin uzunluğu Length özelliği sayesinde öğrenilip 2. TextBox’a yazıldıktan sonra 2 parametreye sahip “Bosluk_Sayisi()” metodu işletilip bu metodun geriye gönderdiği değer 3. TextBox’a yazılmaktadır. Bu metot ile karaktersel bilgideki boşluk sayısını öğrenmek istediğimiz için 2. parametre olarak (' ') kullandık. 

private int Bosluk_say(string str, char karakter)
 
   int uzunluk, sayi; 
   uzunluk = str.Length; 
   sayi = 0; 
   for (int i = 0; i < uzunluk; i++) 
     if (str[i] == karakter) 
       sayi = sayi + 1; 
    return sayi;       
 

Kullanıcı kelimelerin arasına birden fazla boşluk koymuş olabileceği için bulunan karakterden sonra gelen karakterin ayırıcı karakterden farklı olup olmadığı araştırılmalıdır. İlk TextBox’a yazılan bilgideki kelime sayısını bulup 2. TextBox’a yazmak için aşağıda verilen kodu hazırladık. 

private void button1_Click(object sender, EventArgs e) 
 
   string str = textBox1.Text.Trim() ; 
   int sayi = 0; 
   int uzunluk = textBox1.Text.Length; 
   if (uzunluk == 0) 
   
     textBox2.Text = "0"; 
     return; 
    
   for (int i = uzunluk - 1; i > -1; i--) 
    if (str[i] == ' ') 
     if (str[i + 1] != ' ') 
       sayi = sayi + 1; 
    textBox2.Text = Convert.ToString(sayi+1); 
 

Left() Metodu 

Visual Basic’in Left() metodu kendisine parametre olarak verilen karaktersel bilginin soldan itibaren istenilen kadarını elde etmek amacıyla kullanılmaktadır. Left() metodu parametre olarak aldığı bilgiden 2. parametrede belirtilen kadarını soldan itibaren alıp geriye gönderir. Uzunluk değerinin 0 olması halinde geriye boşluk(null) gönderilir. 

Left(Karaktersel Bilgi, uzunluk) 

Uzunluk değeri karaktersel bilginin uzunluğundan fazla ise geriye karaktersel bilginin kendisi gönderilir. Left() metodu Microsoft.VisualBasic’de tanımlı olduğu için fonksiyon adıyla birlikte bu namespace’in adı yazılmalıdır. 

string sehir ="Ankara";
string sonuc;
sonuc = Microsoft.VisualBasic.Strings.Left(sehir, 4);   // sonuc ‘Anka’ olur
sonuc =Microsoft.VisualBasic.Strings.Left("Microsoft", 5);  //sonuc ‘Micro’ olur 

Right() Metodu 

Çalışma mantığı yönünden Left() metoduna çok benzeyen Right() metodu 2 parametreye sahiptir. Bu metot ilk parametre olarak dışarıdan karaktersel veya Object tipte sabit bilgi veya değişken verilmektedir. Bu metot, kendisine parametre olarak verilen karaktersel veya Object tipli bilginin sağdan itibaren istenilen kadarını almak amacıyla kullanılmaktadır. 

           
Right(Karaktersel Bilgi, uzunluk) 

Right() metodu parametre olarak aldığı karaktersel bilgiden 2. parametrede belirtilen kadarını sağdan itibaren alıp geriyi gönderir. 

string sehir ="Ankara";
string sonuc;
sonuc = Microsoft.VisualBasic.Strings.Right(sehir, 4);   // sonuc ‘kara’ olur
sonuc =Microsoft.VisualBasic.Strings.Right("Microsoft", 4); //sonuc ‘soft’ olur 

Karaktersel bilgi veya string değişkenlerin içeriklerinin sağdan veya soldan istenilen kadarını almak için Visual Basic’in Left() ve Right() metotlarını kullanmak yerine konunun devamında hakkında bilgi verilen String sınıfının SubString() metodundan yararlanabilirsiniz. 

TrimStart(), TrimEnd() ve Trim() Metotları 

TrimStart() metodu kendisinin önüne yazılan karaktersel bilgilerin baş tarafında bulunan boşlukları çıkarmak amacıyla kullanılır. Parametre olarak alınan bilginin baş tarafında boşluklar varsa bunlar çıkarılır. Geriye karaktersel bilginin yeni hali gönderilir. 

Karaktersel Bilgi.TrimStart()
string sehir = "  Ankara    ";
textBox1.Text=sehir.TrimStart(); //TextBox’a “Ankara   ” aktarılır 

TrimEnd() metodu ise parametre olarak aldığı karaktersel bir bilginin arka tarafında yani sağında bulunan boşlukları çıkarmak amacıyla kullanılmaktadır. 

    Karaktersel Bilgi.TrimEnd 

string sehir = "  Ankara    ";
textBox1.Text= sehir.TrimEnd(); // TextBox’a     Ankara”  aktarılır. 

Trim() fonksiyonu, parametre olarak aldığı karaktersel bilginin hem başında hem de sonunda yer alan boşlukları çıkarıp yeni şeklini geriye gönderir. Karaktersel bilgiyi hem TrimStart() hem de TrimEnd() metodunun etkisine maruz bırakmak yerine her iki metodun yaptıklarını bir seferde tek başına yapabilen Trim() fonksiyonu kullanılabilir. 

string sehir = "  Ankara   ";
textBox1.Text= sehir.Trim();  //TextBox’a “Ankara”  aktarılır. 

PadLeft() ve PadRight() Metotları 

Yukarıda haklarında bilgi verilen String sınıfının TrimStart TrimEnd ve Trim metotları karaktersel bilgilerdeki istenmeyen boşlukları atmaya yaramaktadır. Ancak bazen karaktersel bilginin belli sayıda karakter içermesi istenir. Bu gibi durumlarda mevcut içeriğin başına veya sonuna eklemeler yapılır. Bu işlem C# projelerinde PadRight() ve PadLeft() metotları ile yapılmaktadır. PadRight() metodu 2 parametreye sahiptir. 

Karaktersel Bilgi.PadRight(Karakter Sayısı, Karakter)

Karaktersel Bilgi.PadLeft(Karakter Sayısı, Karakter) 

İlk parametrede söz konusu bilginin kaç karaktere sahip olacağı belirtilmektedir. Eksik karakterlerin yerine konulacak karakter ise 2. parametrede belirtilmektedir. Bu metodun nasıl kullanıldığını anlatmak için aşağıda verilen kodu hazırladık. 

string sifre = "2004";
textBox1.Text= sifre.PadRight(8, '*');
textBox2.Text= sifre.PadLeft(8, '*'); 

Bu koddaki ilk satırda sifre adı verilen string bir değişken tanımlanıp bu değişkene karakterden meydana gelen bilgi aktarılmaktadır. 2. satırda ise bu değişkenin içeriği PadRight() metodu ile 8 karaktere tamamlanmaktadır. Eksik karakterler değişken içeriğinin ön tarafına alınmak isteniyorsa PadRight() yerine PadLeft() metodu kullanılmalıdır. Bu satırlar bir metoda yazılıp işletilirse aşağıdaki gibi bir sonuç alınır.



StartsWith() ve EndsWith() Metotları

Bazen karaktersel bilginin baş tarafında veya sonunda belli bilgilerin olup olmadığı araştırılır. Örneğin bir hitap bilgisinin ilk 3 harfinin “Bay” olup olmadığı veya bir adres bilgisinin son 6 karakterinin Ankara olup olmadığı araştırılmak istenebilir. 

Bu gibi durumlarda StartsWith() ve EndsWith() metotları kullanılır. Bu 2 metot ilgilenilen bilgiyi parametre olarak almakta ve geriye bool bilgi göndermektedir. Aşağıda verilen kod işletilirse ilk TextBox’ın içeriğinin ilk 5 karakteri “0-

 
bool sonuc = textBox1.Text.StartsWith("0-312"); 
  if (sonuc == true) 
    textBox2.Text = "Ankara"; 

Bu kodda ilk TextBox’ın içeriğinin ilk 5 karakterinin “0-

bool sonuc = textBox1.Text.EndsWith("TL");
if (sonuc != true) 
  textBox2.Text = textBox1.Text + " TL"; 

ToLower() ve ToUpper() Metotları 

ToLower() metodu kendisinden önce yazılan karaktersel bilginin alfabetik karakterlerin büyük olanlarını küçük harfe çevirmektedir. ToLower() metodu geriye karaktersel bilginin yeni halini, yani büyük harfleri küçük harfe çevrilmiş halini döndürür. 

Karaktersel Değişken.ToLower() 

ToLower() metodu kendisinin önüne yazılan karaktersel bilginin yalnızca alfabetik karakterleri üzerinde etkili olmaktadır. Bu metodun rakamlar ve diğer karakterler üzerinde bir etkisi yoktur. Bu metodun nasıl kullanıldığını aşağıda görebilirsiniz. 

string  Takim = "BEŞİKTAŞ";
textBox1.Text = Takim.ToLower(); //TextBox’a “beşiktaş” aktarılır 

ToUpper
() metodu ise karaktersel bilgideki küçük harfleri büyük harfe çevirmektedir ve geriye karaktersel bilginin küçük harflerinin büyük harfe çevrilmiş halini gönderir. 

string Takim = "beşiktaş";
textBox1.Text = Takim.ToUpper(); // TextBox’a “BEŞİKTAŞ” yazılır.  

Gördüğünüz gibi ToUpper() ve ToLower() metotları Türkçenin kurallarına göre işlem yapabilmektedir. Ama büyük harfe çevirmek istediğiniz bilgi İngilizce yazılmış bir kelime veya cümle olsaydı hatalı sonuçlar alınırdı. Bu olayı göstermek için forma 2 TextBox yerleştirip TextBox’a yazılacak bilginin büyük harfe çevrilmiş halini 2. TextBox’a aktarmak için aşağıda verilen satırı yazdık. 

textBox2.Text = textBox1.Text.ToUpper();
 

Geçerli dil Türkçe iken ilk TextBox’a İngilizce bir kelimeyi yazıp ToUpper() metodu ile kelimeyi büyük harfe çevirmek isterseniz aşağıdaki gibi hatalı sonuçlar alırsınız.



ToUpper() ve ToLower() gibi metotlar Denetim Masasındaki Bölge ve Dil Seçenekleri seçeneği ile ekrana getirilen diyalog kutusunda seçilen dilden etkilenmektedir. Yukarıda verilen sonuç alındığı sırada kullanılan bilgisayarda Türkçe seçili olduğu için büyük harfe çevirme işlemi Türkçenin kurallarına göre yapıldı. 

Kullanıcıya mesaj verip ekrana Bölge ve Dil Seçenekleri diyalog kutusunda dil seçimi yapması gerektiğini söylemek mümkün ama bu işlemi kod yazarak yapabilirsiniz. Bu amaçla ToUpper() metoduna CultereInfo nesnesi parametre olarak verilir. Bu işlemin nasıl yapıldığını aşağıda görebilirsiniz. 

System.Globalization.CultureInfo ulke;
ulke = new System.Globalization.CultureInfo("en");
textBox2.Text = textBox1.Text.ToUpper(ulke); 

System.Globalization sınıfının CultureInfo() metodu ile İngilizce dilini seçip ToUpper() metoduna parametre olarak verirseniz büyük harfe çevirme işlemi İngilizcenin kurallarına göre yapılır.
.NET Framework 1.1 kullanırken ToLower() metodunu kullandığımızda “I”, “ı" olarak çevriliyordu bunun önüne geçmek için globalization kullanıyorduk. Artık direkt ToLowerInvariant() metodunu kullanabiliriz. 

StrConv() Metodu 

Karaktersel bilgilerdeki büyük harfleri küçük harflere, küçük harfleri ise büyük harflere çevirirken String sınıfının ToUpper() ve ToLower() metotlarının yerine Visual Basic’in StrConv() metodunu kullanabilirsiniz. StrConv() metodu ek olarak karaktersel bilgideki kelimelerin yalnızca ilk harflerini büyük, diğerlerini küçük yapabilmektedir. Bu metoda ilk parametrede üzerinde işlem yapılacak bilgi, 2. parametre ise yapılacak işlem belirtilmektedir. 

StrConv(Karaktersel Bilgi, Yapılacak İşlem) 

2. parametre olarak
VbStrConv.UpperCase kullanılırsa söz konusu bilgi büyük harfe çevrilir. StrConv() metoduna 1. parametre olarak verilecek bilginin küçük harfe çevrilmesini sağlamak istiyorsanız 2. parametre olarak VbStrConv.LowerCase’i kullanmalısınız. Aşağıda verilen koddaki ilk satır sayesinde formdaki ilk TextBox’a yazılanlar büyük harfe çevrilip 2. TextBox’a aktarılır. 

textBox2.Text = Microsoft.VisualBasic.Strings.StrConv(textBox1.Text, 
            Microsoft.VisualBasic.VbStrConv.Uppercase, 0);
textBox3.Text = Microsoft.VisualBasic.Strings.StrConv(textBox1.Text, 
           Microsoft.VisualBasic.VbStrConv.ProperCase, 0); 

Bu koddaki 2. satır sayesinde ilk TextBox’a yazılan karaktersel bilgideki kelimelerin ilk harfleri büyük harfe çevrilir. Aşağıda verilen ekran görüntüsünü formdaki ilk TextBox’a bilgi girip bu satırların yazıldığı metodu işlettikten sonra aldık.



Şimdi bu işlemi farklı bir teknikle CultureInfo sınıfından yararlanarak yapacağız. S
ystem.Globalization’de CulureInfo sınıfının dışında TextInfo sınıfı bulunmaktadır. TextInfo sınıfının yapıcı metodu bulunmadığı için CulureInfo sınıfının TextInfo sınıfından yararlanılarak elde edilmektedir. Bu sınıfın nasıl kullanıldığını aşağıda görebilirsiniz. Bu kod işlev bakımından yukarıda verilenden farklı değildir. 

string str = textBox1.Text;
System.Globalization.CultureInfo ulke;
ulke = new System.Globalization.CultureInfo("tr");
System.Globalization.TextInfo metin = ulke.TextInfo;
textBox2.Text = metin.ToUpper(str);
textBox3.Text = metin.ToTitleCase(str); 

SubString() Metodu 

SubString() metodu sayesinde karaktersel bilginin istenilen sayıda karakterini alıp başka amaçlarla kullanmak mümkündür. String sınıfının SubString() metodu 2 parametreye sahiptir. Alınacak karakter sayısı 2. parametrede belirtilmezse başlangıç yerinden itibaren bilginin sonuna kadar olan kısım alınıp geriye gönderilir. 

Karaktersel Değişken.SubString(Başlangıç Yeri, Karakter Sayısı) 

SubString() metodunun nasıl kullanıldığını anlatmak için aşağıda verilen satırları hazırladık. Bu kod ile “Telefon” değişkenin içeriğinin 2. karakterden(aslında 3. karakterden itibaren çünkü başlangıç 0’dır) itibaren 3 karakteri alınıp geriye gönderilmektedir. 

string Telefon = "0-312-435 30 30";
string Kod;
Kod = Telefon.Substring(2,3); // Kod "312" olur. 

SubString() metodu yerine Visual Basic’in aynı işleve sahip Mid() metodunu kullanabilirsiniz. Mid() metodu 3 parametreye sahiptir. 1. parametrede verilen bilginin Başlama Yeri'den itibaren Alınacak Karakter Sayısı kadarı alınarak geriye gönderilir. Alınacak veya geriye gönderilecek karakter sayısını belirtmek amacıyla kullanılan 3. parametrenin kullanılması isteğe bağlıdır. 

Mid(Karakter Bilgi, Başlama Yeri, Alınacak Karakter Sayısı) 

Alınacak karakter sayısı verilmezse, başlama yerinden karaktersel bilginin sonuna kadar olan kısmı alınır. Bu metodun nasıl kullanıldığını göstermek için forma 4 TextBox’a yerleştirip aşağıda verilen kodu hazırladık. 

private void Kopyala_Click(object sender, EventArgs e) 
 
   int baslangic = Convert.ToInt32(textBox2.Text); 
   int sayi = Convert.ToInt32(textBox3.Text); 
   textBox4.Text=Microsoft.VisualBasic.Strings.Mid(textBox1.Text, baslangic, sayi); 
 

Bu metot sayesinde formdaki ilk TextBox’a yazılan bilginin istenilen kadarı Mid() metodu ile alınıp 4. TextBox’a aktarılmaktadır. Aşağıda verilen ekran görüntüsü formdaki ilk 3 TextBox’a bilgi girilip bu metot işletildikten sonra alındı.



Bazen TextBox’lara girilen bilgilerin ilk harfinin büyük, diğer harflerin küçük olması istenir. Bu işlemi Mid(), SubString(), ToLower() ve ToUpper() metotlarından yararlanarak gerçekleştirebilirsiniz. Bu işlemin nasıl yapıldığını göstermek için forma 2 TextBox yerleştirip ilk TextBox’ın Leave() metodunu aşağıdaki gibi düzenledik. 

private
void textBox1_Leave(object sender, EventArgs e) 
 
   string ilk_harf, bilgi; 
   ilk_harf = textBox1.Text.Substring(0, 1); 
   bilgi = textBox1.Text.Substring(1); 
   bilgi = bilgi.ToLower(); 
   ilk_harf = ilk_harf.ToUpper(); 
   textBox1.Text = ilk_harf + bilgi;   
 

Çalışma anında formdaki ilk TextBox’a bilgi girilip Tab tuşu veya başka bir teknikle diğer TextBox’a geçildiğinde Leave olayı meydana gelir ve bu metot işletilir. Bu metot sayesinde TextBox’ın içeriğinin ilk harfi büyük, diğerleri küçük yapılır. 

Insert(), Replace() ve Remove() Metotları 

Insert() metodu karaktersel bir bilginin istenen yerine başka bir bilgiyi eklemek amacıyla kullanılmaktadır. Eklenecek bilgi Insert() metoduna 2. parametre olarak verilir. 

Karaktersel Değişken.Insert(Başlama Yeri, Eklenecek Bilgi) 

Ekleme işleminin yapılacağı karaktersel bilgi Insert() metodunun önüne yazılır. Bu metot geriye karaktersel bilginin yeni halini gönderir. Insert() metodunun nasıl kullanıldığını göstermek için aşağıda verilen kodu hazırladık. 

string Takim1 = "Türk Milli Takımı";
string Takim2 = "Futbol";
textBox1.Text = Takim1.Insert(11, Takim2);  

Proje çalıştırılıp bu metot işletilirse ekleme işleminin yapıldığı hedef bilginin yeni hali formdaki TextBox’a aktarılır.



Karaktersel bilginin içeriğinin tümünü veya bir kısmını başka bir bilgi ile değiştirmek istiyorsanız Insert() yerine Replace() metodunu kullanabilirsiniz. 

Karaktersel Değişken.Replace(Eski Bilgi, Yeni Bilgi) 

Replace() metodunun nasıl kullanıldığını aşağıda görebilirsiniz. Bu metot sayesinde Takim1 değişkeninde “Futbol” metni aranır. Bulunursa 2. parametre ile değiştirilir. 

  
string Takim1 = "Türk Milli Futbol Takımı"; 
   string Takim2 = "Basketbol"; 
   textBox1.Text = Takim1.Replace("Futbol", Takim2);  

1. parametrede verilen bilgi karaktersel değişkende bulunamazsa Replace() metodu adının önüne yazılan karaktersel bilgiyi değiştirmeden geriye gönderir. Bu metot işletilirse aşağıdaki gibi bir sonuç elde edilir.



Karaktersel bilginin bir kısmını silmek istiyorsanız Remove() metodunu kullanabilirsiniz. Remove() metodunun ilk parametresi ile silme işleminin kaçıncı karakterden itibaren yapılacağı belirtilmektedir. Remove() metodundan önce yazılan karaktersel bilgiden silinecek karakter sayısı ise 2. parametre ile verilmektedir. 

string Takim1 = "Türk Milli Futbol Takımı";
textBox1.Text = Takim1.Remove(11, 6) 

Bu satırlar işletildiğinde “Takim1” adlı değişkenin 11. karakterinden başlamak üzere toplam 6 karakteri silinerek yeni şekli geriye gönderilir. Bu işlemde Remove() metodundan önce yazılan string değişken bu işlemden etkilenmez. 

IndexOf() Metodu İle Arama Yapmak 

String bilgilerde veya string değişkenlerde arama yaparken IndexOf() metodunu kullanabilirsiniz. Bu metot string bilgide aranan harf veya kelimenin başlangıç noktasını bulmanızı sağlamaktadır. Bu metot 2 parametreye sahiptir. Aranacak bilgi 1. parametre olarak verilmektedir. 2. parametrede ise aramanın başlayacağı yer işaret edilmektedir. 

KarakterselBilgi.IndexOf(Aranan Bilgi, Başlangıç) 

Aranan bilgi bulunduğunda aranan bilginin başlangıç yeri geriye gönderilir, Bulunmadığında ise -1 gönderilir. Aşağıda verilen kodda aramanın başlangıç yerini 0 olarak verdik. IndexOf() metodunun 2. parametresi ile başlangıç yeri belirtilmezse 0 olduğu varsayılır. 

string Takim = "Fenerbahçe";
int Sonuc = Takim.IndexOf("bahçe", 0); // Sonuc 5 olur. 

RichTextBox’ın veya bir Text dosyanın içeriğinde arama yaparken bulunan konumu 1 arttırıp başlangıç yeri olarak kullanıp Word gibi kelime işlem programlarındaki gibi arka arkaya aynı bilgiyi arayabilirsiniz. 

Yukarıdaki sayfalarda string değişken veya karaktersel bilginin uzunluğunu bulurken Visual Basic’in Len() metodundan ve String sınıfının Length  özelliğinden yararlandık. Şimdi IndexOf() metodunun işlevinin anlaşılmasını sağlamak için aynı işlemi IndexOf() metodu ile yapacağız. Buradaki amacın işlevsel kodlar yazmaktan çok metodun anlaşılmasını sağlamak olduğunu belirtmek isteriz. 

private
void Form1_Click(object sender, EventArgs e) 
 
   int i = 0; 
   int pozisyon = 0; 
   string metin = textBox1.Text; 
   metin = metin + " "; 
   while (pozisyon != -1) 
   
      i++; 
      pozisyon = metin.IndexOf(" ", i); 
   
   textBox2.Text = Convert.ToString(i - 1);  
  } 

Bu metot işletildiğinde formdaki ilk TextBox’a yazılan bilginin uzunluğu bulunup 2. TextBox’a aktarılır. Burada yapılan, uzunluğu bulunmak istenen metnin sonuna boşluk karakteri ekleyip boşluk karakterinin yerinin veya pozisyonun bulunmasından ibarettir. Bu işlemi döngü kurmadan da yapmak mümkündür. 

Yukarıda IndexOf() metodu ile string bilgide başka bir bilgiyi aradık. Şimdi ise string bilgide char bir bilgiyi arayacağım. Bu amaçla aşağıda verilen kodu yazdık. 

string str = "Galatasaray";
int konum = str.IndexOf('a', 0);
textBox1.Text = konum.ToString();  // TextBox 1 yazılır. 

Arama işleminin belli sınırlar içinde yapılmasını istiyorsanız aramaya konu edilecek metnin karakter sayısını 3. parametre olarak vermelisiniz. IndexOf() metodu aşağıdaki gibi kullanılırsa arama 3. karakter ile 6. karakter arasında kalan karakterlerde yapılır. 

 
string str = "Galatasaray"; 
 int konum = str.IndexOf('a', 3, 3); 
 textBox1.Text = konum.ToString();  

LastIndexOf() Metodu 

IndexOf() metodu string bir bilgide başka bir bilgiyi arar ve bulursa ilk konumunu geriye gönderir. Arama 2. parametrede belirtilen konumdan itibaren yapılır. Aranan bilginin en son bulunduğu yeri öğrenmek istiyorsanız LastOndexOf() metodunu kullanabilirsiniz. 

KarakterselBilgi.LastIndexOf(Aranan Bilgi, Başlangıç) 

Bu metoda 2. parametre olarak başlangıç noktası verilmezse 0 olduğu varsayılır. Bu metodun nasıl kullanıldığını aşağıda görebilirsiniz. Bu örnekte aramaya konu ettiğimiz string bilgide “spor” kelimesi 2 kez kullanılmış. LastIndexOf() metodu “spor” kelimesinin 2. kez kullanıldığı yeri bulup geriye gönderir. 

string str = "Bursaspor Trabzonspor";
int konum = str.LastIndexOf("spor");
textBox2.Text =konum.ToString();  // TextBox’a 17 yazılır. 

Compare() ve Equals() Metotları 

Compare() metodu, karaktersel 2 bilgiyi veya karaktersel bilgi içeren 2 değişkeni birbirleri ile karşılaştırmak amacıyla kullanılmaktadır. Benzer işlemleri eşit(==) ve eşit değil(!=) operatörleri ile yapabilirsiniz. 

Bu metot birbirleri ile karşılaştırılacak string bilgileri parametre olarak almaktadır. Birinci parametrede verilen bilgi, 2. parametrede verilen bilgi ile karşılaştırılır. Geriye karşılaştırmanın sonucu ile ilgili bir değer gönderilir. 

            
           
Compare(İlk_Bilgi, İkinci_Bilgi) 

Karşılaştırılan ilk bilgi ikinciden büyükse geriye 1, küçükse yani eşit değilse geriye -1, bilgiler birbirine eşitse 0 gönderilir. Bu metodun nasıl kullanıldığını anlatmak için aşağıda verilen satırları hazırladık. 

  
stringKitap1 = "Yılanların öcü"
   string Kitap2 = "Yılanı Öldürseler"
   int sonuc = String.Compare(Kitap1, Kitap2); 
   if (sonuc == 0) 
     MessageBox.Show("Bilgiler birbirine eşit"); 
   else 
     MessageBox.Show("Bilgiler eşit değil"); 

Burada karşılaştırılan bilgiler birbirine eşit olmadığı için Compare() metodu geriye sıfırdan farklı bir değer gönderir. Bilgiler karşılaştırılırken büyük küçük harf ayrımı yapılır. Karşılaştırma sırasında küçük büyük harf ayrımının yapılmasını istemiyorsanız Compare() metoduna 3. parametre olarak true kullanmalısınız. Compare() metodu aşağıdaki gibi kullanıldığında bilgilerin birbirine eşit olduğu kabul edilir. 

string Kitap1 = "Yılanların öcü";
string Kitap2 = "Yılanların Öcü";
int Sonuc = String.Compare(Kitap1, Kitap2, true); 

2 bilgi birbiri ile karşılaştırılırken karşılaştırmada geçerli dilden farklı bir dilin kurallarının gözetilmesini istiyorsanız söz konusu dili 4. parametrede belirtmeniz gerekir. 4. parametrede dil seçiminin nasıl yapıldığını aşağıda görebilirsiniz. 

 
string Kitap1 = "Yılanların öcü"; 
 string Kitap2 = "Yılanı Öldürseler"; 
 System.Globalization.CultureInfo dil; 
 dil = new System.Globalization.CultureInfo("tr"); 
 int sonuc = String.Compare(Kitap1, Kitap2, true, dil); 
 if (sonuc == 0) 
   MessageBox.Show("Bilgiler birbirine eşit"); 
 else 
   MessageBox.Show("Bilgiler eşit değil"); 

2 bilginin birbirine eşit olup olmadığını araştırırken Equals() metodunu kullanabilirsiniz. Equals() metodu Compare() metodu gibi karşılaştırılmak istenen 2 bilgiyi parametre olarak almakta ve geriye karşılaştırmanın sonucu hakkında bilgi göndermektedir. Karlaştırılan bilgiler birbirine eşit ise geriye true, değilse false gönderilmektedir. Buna göre Compare() ile Equals() arasındaki temel fark, Equals() metodunun geriye mantıksal bilgi göndermesidir. 

Karşılaştırma yaparken Compare yerine CompareTo() metodunu kullanabilirsiniz. Karşılaştırılmak istenen ilk bilgi Compare metodunun önüne, 2. bilgi ise metoda parametre olarak verilmektedir. Bu metodun nasıl kullanıldığını aşağıda görebilirsiniz. 

string Kitap1 = "Yılanların öcü";
string Kitap2 = "Yılanı Öldürseler";
int sonuc = Kitap1.CompareTo(Kitap2);  
if (sonuc == 0) 
  MessageBox.Show("Bilgiler birbirine eşit");
else 
  MessageBox.Show("Bilgiler eşit değil");

Concat Metodu İle Karaktersel Bilgileri Birleştirmek 

String ve object bilgileri birleştirirken artı(+) operatörünü kullanabilirsiniz. Ancak String sınıfının Concat metodu ile karaktersel bilgiler birleştirilirken ek işlemler yapılabilinmektedir. Bu metod birleştirilecek string bilgileri parametre olarak almaktadır. 

String.Concat(Bilgi1, Bilgi2, Bilgi3); 

Bu metodun nasıl kullanıldığını anlatmak için aşağıda verilen kodu hazırladık. Önce 2 string değişken tanımlayıp bu değişkenlere bilgi aktardık. Ardından bu string değişkenlerin içeriklerini TextBox’lara aktardık. 

string Adres1 = "Sağlık sok No:19/B";
string Adres2 = "Sıhhiye/Ankara";
textBox1.Text = Adres1;
textBox2.Text = Adres2;
textBox3.Text = String.Concat(Adres1, Adres2); 

Bu örnekte 2 string bilgiyi birleştirmek istediğimiz için Concat() metoduna bu string değişkenleri parametre olarak verdik. Concat() metoduna aşağıda yapıldığı gibi string değişkenlerin yerine doğrudan bilgileri parametre olarak verebilirsiniz. 

textBox3.Text = String.Concat("Sağlık Sok. No:19/B", "Sıhhiye/Ankara"); 

Concat() metodu ile string veya object değişkenin elemanlarını birleştirebilirsiniz. Aşağıda verilen kod işletilince Concat() metoduna parametre olarak verilen dizi değişkenin bütün elemanları birleştirilip TextBox’a akarılır. 

string[] dizi = new string[3];
dizi[0] = "Fenerbahçe";
dizi[1] = "Galatasaray";
dizi[2] = "Beşiktaş";
textBox1.Text=String.Concat(dizi); //TextBox’a FenerbahçeGalatasarayBeşiktaş yazılır 

Split() ve Join() Metotları 

Split() metodu sayesinde karaktersel bir bilgiyi istediğiniz sayıda parçaya bölebilirsiniz. Örneğin bu metodu kullanarak birlikte yazılan ad ve soyadı birbirinden ayırabilirsiniz. 

Karaktersel Bilgi.Split(Ayırıcı Karakter)

Split() metodu string bilgiyi birden fazla parçaya ayırırken kullanılacak ayırıcı karakteri parametre olarak alıp geriye karaktersel bilginin parçalanmış halini göndermektedir. Geriye gönderilen bilgileri yakalamak için daha önceden dizi değişken tanımlamalısınız. 

string[] dizi;
dizi = textBox1.Text.Split(' ');
textBox2.Text = dizi[0];
textBox3.Text = dizi[1]; 

Bu metotta önce String bir dizi değişken tanımladık. Ardından formdaki ilk TextBox’a yazılan metni 2 parçaya ayırmak için Split() metodunu kullandık. 1. parametrede verilen karaktersel bilginin bölüneceği yer tespit edilirken ayırıcı karakterden yararlanılır. Ayrıcı karakter olarak boşluğu(' ') kullandık. Aşağıda verilen ekran görüntüsünü formdaki ilk TextBox’a bilgi girip bu metodu işlettikten sonra aldık.




Split() metoduna ayrıcı karakter parametre olarak verilmezse bunun boşluk(' ') olduğunu varsaymaktadır. Şimdi
tarih bilgisini DateTime yapısının Today özelliği sayesinde elde edip ilk TextBox’a aktarıp tarih bilgisini gün, ay ve yıl şeklinde 3 parçaya bölüp diğer TextBox’lara aktaracağız. Bu amaçla aşağıda verilen kodu hazırladık. 

  
string Tarih = DateTime.Today.ToString(); 
   textBox1.Text = Tarih.Substring(0, 10);  
   string[] dizi = textBox1.Text.Split('.'); 
   textBox2.Text = dizi[0]; 
   textBox3.Text = dizi[1]; 
   textBox4.Text = dizi[2]; 

Today özelliğiyle hem sistem tarihi hem de saatini içerdiği için Substring() metodundan yararlanarak tarih ve zaman bilgisinin ilk 10 karakterini aldık. Substring() metodu yerine DateTime sınıfının ToShortDateString() metodunu kullanabilirsiniz.Bu şekilde düzenlen kod işletilirse aşağıdaki gibi bir sonuç elde edilir.



Split() metodunun Overload edilmiş 6 değişik hali var. Yukarıda verilen bunlardan yalnızca birisiydi. İşte bir ikincisi: Ayırıcı karakter olarak birden fazla elemana sahip char tipindeki dizi değişkeni parametre olarak verirseniz bu karakterler "veya" işlevi görür. Yani Split() metodu aşağıdaki gibi kullanılırsa ayırıcı karakter olarak ister "-" ister "," kullanılsın değişen bir şey olmaz. 

char[] kar = new char[2];
kar[0] = '-';
kar[1] = ',';
string[] dizi = textBox1.Text.Split(kar);
textBox2.Text = dizi[0];
textBox3.Text = dizi[1]; 

Yukarıda belirtildiği gibi Split() metoduna char dizisini parametre olarak verip birden fazla ayırıcı karakter kullanmak mümkündür. Bu nedenle aşağıda verilen kodda henüz bir yenilik yoktur


private void Bol_Click(object sender, EventArgs e) 
 { 
   string[] dizi; 
   char[] kar = new char[2]; 
   kar[0] = '-'; 
   kar[1] = ','; 
   string yazar = "Orhan-Veli-Kanık"; 
   dizi = yazar.Split(kar); 
   textBox1.Text = dizi[0]; 
   textBox2.Text = dizi[1]; 
   textBox3.Text = dizi[2]; 
 } 

Split() metodu ile parçalamak istediğimiz string bilgide 3 kez “-“ karakteri kullanıldığı için ayırıcı karakterin “–“ olduğu kabul edilir. Bu metnin yalnızca ilk 2 parçası ile ilgileniyorsanız Split() metodunu aşağıdaki gibi kullanabilirsiniz. 

private void Bol_Click(object sender, EventArgs e) 
 { 
   string[] dizi; 
   char[] kar = new char[2]; 
   kar[0] = '-'; 
   kar[1] = ','; 
   string yazar = "Orhan-Veli-Kanık"; 
   dizi = yazar.Split(kar, 2); 
   textBox1.Text = dizi[0]; 
   textBox2.Text = dizi[1]; 
   textBox3.Text = dizi[2]; 
 } 

Bu şekilde kullanılan Split() metodu geriye 2 elemanlı dizi değişken göndereceği için TextBox3’e bilgi aktarılan satır hataya neden olur. String dizisinin Split() metoduna nasıl parametre olarak verildiğini göstermek için aşağıda verilen kodu hazırladk. 

private void Bol_Click(object sender, EventArgs e) 
 { 
   string[] dizi; 
   string[] str = new string[2]; 
   str[0] = "---"; 
   str[1] = "..."; 
   string yazar = "Orhan...Veli---Kanık"; 
   dizi = yazar.Split(str, StringSplitOptions.None);  
   textBox1.Text = dizi[0]; 
   textBox2.Text = dizi[1]; 
   textBox3.Text = dizi[2]; 
 } 

Karaktersel bilgileri birleştirmek veya Split() metodunun yaptığı işin tersini yapmak istiyorsanız Join() metodunu kullanabilirsiniz. Join() metodu yukarıda hakkında bilgi verilen Concat() metodundan farklı olarak birleştirilen bilgilerin arasına ayırıcı karakter konulmasına destek vermektedir. 

Bu metodun nasıl kullanıldığını anlatmak için yukarıda verilen örneği değiştireceğiz. Kullanıcı ilk 3 TextBox’a tarih bilgisini ay, gün ve yıl olarak yazacak ve hazırlayacağımız koddaki Join() metodu bu 3 bilgiyi birleştirip formdaki son TextBox’a aktaracaktır. 

string[] dizi = new string[3];
dizi[0] = textBox1.Text;
dizi[1] = textBox2.Text;
dizi[2] = textBox3.Text;
textBox4.Text = String.Join(".", dizi); 

S
trDup()  Metodu 

Visual Basic’in StrDup() metodu sayesinde bir karakterden istenilen sayıda elde edebilmek mümkündür. Bu metot 2 parametreye sahiptir. 1. parametre tekrar sayısıdır ve en fazla 65.525 olabilir. 2. parametre ile tekrarlanarak yazılacak karakter veya karakteri içeren değişken verilmektedir. 2. parametre olarak doğrudan karakter yerine karakteri temsil eden Ascii kodu yazılabilir. 

    
StrDup(Sayı, Karakter) 

    textBox1.Text = Microsoft.VisualBasic.Strings.StrDup(10, "*"); 
    textBox2.Text = Microsoft.VisualBasic.Strings.StrDup(20, "-"); 

2. parametrede verilen bilgi birden fazla karakterden meydana geliyorsa yalnızca ilk karakteri göz önüne alınır. Bu satırlar bir metoda yazılıp işletilirse aşağıdaki gibi bir sonuç elde edilir.



Şimdi StrDup() metodu ile benzer işleve sahip bir metodu kendimiz yazacağız. Hazırlayacağımız metot StrDup() gibi 2 parametreye sahip olacak. Bu metodda ilk parametre olarak null veya boşluk verilmesi halinde geriye boşluk göndermektedir. 

public static string Tekrarla(string Str, int adet) 
 
   string Metin=""; 
   if (Str == null || Str == "" || adet < 1) 
     return ""; 
   for (int i = 0; i < adet; i++) 
   
      Metin = Metin + Str; 
   
   return Metin; 
 

Space() Metodu 

Visual Basic’in bu metodu boşluk oluşturmak amacıyla kullanılmaktadır. Ne kadar boşluk oluşturulmak isteniyorsa boşluk sayısı bu metoda parametre olarak verilmelidir. 

        
Space(Boşluk Sayısı) 

Parametre olarak alınan sayısal bilgiye karşılık Space() metodu geriye boşluk gönderir. Bu metodun nasıl kullanıldığını göstermek için üzerinde çalıştığımız projenin formuna 3 TextBox yerleştirip aşağıda verilen satırları hazırladık. Karaktersel bilgileri birleştirirken artı(+) operatörü yerine Concat() metodunu kullanabilirsiniz. 

textBox1.Text = "Fener" + "bahçe";
textBox2.Text = "Fener" + Microsoft.VisualBasic.Strings.Space(10) + "bahçe";
textBox3.Text = "Fener" + Microsoft.VisualBasic.Strings.Space(20) + "bahçe"; 

Chr() ve Asc() Metotları 

Visual Basic’in Chr() metodu 0 ile 255 arasındaki herhangi bir sayıya karşılık gelen ASCII karakterini elde etmek amacıyla kullanılmaktadır. Chr() metodu parametre olarak 0 ile 255 arasında değişen tamsayıyı almaktadır. Geriye bu sayının ASCII karakterini gönderir. Geriye gönderilen değerlerin bazıları ekranda gösterilebilinen karakter olmayıp bir etkidir. 

char sonuc;
sonuc = Microsoft.VisualBasic.Strings.Chr(65); // sonuc "A" olur.
sonuc = Microsoft.VisualBasic.Strings.Chr(66); // sonuc "B" olur. 

Aşağıda verilen satırlar sayesinde forma yerleştirilen ilk TextBox’a yazılan sayısal bilginin Ascii karakteri 2. TextBox’a aktarılır. İlk TextBox’a girilen karaktersel bilgiyi sayısal bilgiye dönüştürmek için Convert sınıfının ToString() metodundan yararlandık. 

int i = Convert.ToInt32(textBox1.Text);
char Karakter = Microsoft.VisualBasic.Strings.Chr(i);
textBox2.Text = Convert.ToString(Karakter); 

Visual Basic’in Asc() metodu, herhangi bir karaktersel bilginin ilk karakterinin ASCII kodunu bulmak amacıyla kullanılmaktadır. Asc() metodu parametre olarak aldığı karaktersel bilginin ilk karakterinin ASCII kodunu geriye gönderir. Bu kod sayesinde ilk TextBox’a yazılan karakterin ASCII kodu bulunup 2. TextBox’a yazılır. 

char Karakter = Convert.ToChar(textBox1.Text);
int i = Microsoft.VisualBasic.Strings.Asc(Karakter);
textBox2.Text = Convert.ToString(i); 

ToCharArray Metodu 

String sınıfının bu metodu parametre olarak aldığı string bilgiyi char tipindeki dizi değişkene aktarmaktadır. Aktarma sırasında dizi değişken boyutlandırılmaktadır. Bu metodun işlevini anlatmadan önce örnek olması için string bir değişkenin içeriğini char tipindeki dizi değişkene kendimiz aktaracağız. Bu amaçla char dizi değişken tanımlayarak boyutlandırdık. 

char[] Dizi;
string Str = "Fenerbahçe";
int Uzunluk;
Uzunluk = Str.Length;
Dizi = new char[Uzunluk]; 

Bu şekilde tanımlayıp çalışma anında boyutlandırdığımız char dizi değişkenin elemanlarına string değişkenin karakterlerini aktaracağız. Bu amaçla bu koda for döngüsü ekledik.   

for (int i = 0; i < Uzunluk; i++) 
  Dizi[i] = Convert.ToChar(Str.Substring(i, 1)); 

String değişkenin içeriğini char tipindeki dizi değişkene aktardıktan sonra bu dizi değişkenin içeriğini birleştirip bir TextBox’a aktaracağız. Bu amaçla yukarıda verilen koda ekleme yaptık. Bu kod işletildiğinde string değişkenin içeriği TextBox’a aktarılır. 

private void Form1_Click(object sender, EventArgs e) 
 
   string str = "Fenerbahçe"; 
   string Takim=""; 
   int uzunluk = str.Length; 
   char[] dizi = new char[uzunluk]; 
   for (int i = 0; i < uzunluk; i++) 
      dizi[i] = Convert.ToChar(str.Substring(i, 1)); 
   for(int j=0; j<uzunluk; j++) 
      Takim = Takim + dizi[j]; 
   textBox1.Text = Takim; 


String bilgiyi char tipindeki dizi değişkene aktarırken yukarıda yapıldığı gibi kod yazmak yerine ToCharArray() metodundan yararlanabilirsiniz. Bu metodun nasıl kullanıldığını aşağıda görebilirsiniz. 

string Str = "Fenerbahçe";
char[] Dizi = Str.ToCharArray(); 

System.String
sınıfı IComparable, ICloneable, IConevertible ve IEnumerable arayüzlerini uygulamaktadır. Bu nedenle string değişkenin içeriğini GetEnumerator() metodu ile Enum koleksiyonuna alabilirsiniz. Bu metodun nasıl kullanıldığını anlatmak için forma TextBox ve 2 düğme yerleştirdim. “İleri” ve “Geri” adını verdiğimiz düğmeleri tıklayıp string bilginin istenen karakterini elde edip TextBox’a aktaracağım. “İleri” düğmesi için yazdığımız kodu aşağıda görebilirsiniz.



Round() ve Floor() Metotları İle Yuvarlama Yapmak 

Matematiksel işlem sonucu elde edilen sayısal bilgilerde virgülden sonraki hane sayısı bazen gerek duyulandan fazla olur. Bu gibi durumlarda elde edilen sayının yuvarlatılması gerekir. Örneğin aşağıda verilen kodda virgülden sonra 3 haneye sahip 2 sayının çarpılması sonucu elde edilen sayıda virgülden sonraki hane sayısı 6 olmaktadır. 

double sayi1, sayi2, sayi3;
sayi1 = 123.595;
sayi2 = 321.987;
sayi3 = sayi1 * sayi2;
textBox1.Text = Convert.ToString(sayi3);  

Sayısal bilgilerde virgülden sonraki hane sayısını kontrol altına almak istiyorsanız Math sınıfının Round() metodundan yararlanabilirsiniz. Round metodu, hane sayısı ayarlanmak istenen bilgiyi ve istenen hane sayısını parametre olarak almaktadır. 

Math.Round(Sayısal Bilgi, Hane Sayısı) 

Sonuc = Math.Round(123.456, 2)  // Sonuc 123,46 olur.
Sonuc = Math.Round(123.432, 2)  // Sonuc 123,43 olur.
Sonuc = Math.Round(123.4326, 3)  // Sonuc 123,433 olur. 

Round() metodu ile yuvarlama yapılırken yuvarlanan hanenin içeriğine göre hareket edilmektedir. Round() yerine Floor() metodunu kullanırsanız yuvarlama aşağıya doğru yapılır ve virgülden sonrası atılır. Yuvarlama işleminin yukarıya doğru yapılmasını istiyorsanız Ceiling metodunu kullanabilirsiniz. 

Sonuc = Math.Floor(123.456);  // Sonuc 123 olur.
Sonuc = Math.Floor(123.432);  // Sonuc 123 olur.
Sonuc = Math.Floor(-123.4326);  // Sonuc -124 olur.
Sonuc = Math.Ceiling(123.567);  // Sonuc 124 olur.
Sonuc = Math.Ceiling(123.432);  // Sonuc 124 olur.
Sonuc = Math.Ceiling(-123.432);  // Sonuc -123 olur. 

Yuvarlama işlemlerinin nasıl yapıldığını anlatmak üzere yukarıda verdiğimiz örnekleri denerken kullandığımız bilgisayarda ondalık ayırıcı karakter olarak virgül(,) geçerliydi. Buna rağmen Round() metoduna parametre olarak verdiğimiz sayıda ondalık karakter olarak noktayı(.) kullandık. Raund() metoduna parametre olarak verilecek sayı çalışma anında kullanıcıdan isteniyorsa kullanıcı geçerli bölgesel ayarlara bağlı kalarak sayıyı girmelidir. Bu konuda bilgi vermek için forma 2 TextBox yerleştirip aşağıda verilen kodu hazırladık. 

double Sayi, Sonuc;
Sayi = Convert.ToDouble(textBox1.Text);
Sonuc = Math.Round(Sayi,2); 
textBox2.Text = Sonuc.ToString();             

Kullanıcının ilk TextBox’a girdiği sayı Round() metoduna parametre olarak verilip yuvarlanıp 2. TextBox’a yazılır. Sonuç mevcut bölgesel ayarlara göre alınır. Aşağıda verilen ekran görüntüsü alındığı sırada ondalık ayırıcı karakter olarak virgül seçilmişti.



Bu sırada ondalık ayırıcı karakter nokta olsaydı aşağıdaki gibi bir sonuç alınırdı.



İşi şansa bırakmak istemiyorsanız Globalization sınıfından yararlanıp ondalık noktayı seçebilir veya bölgesel ayarlarda değişiklik yapabilirsiniz. Aşağıda verilen kod işletildiğinde önce bölgesel ayarlar İngilizce-ABD yapılır, ardından Round() metoduna parametre olarak verilen sayının 2. haneden sonrası yuvarlatılır. Bu şekilde C# projesi dahilinde yapılan bölgesel ayar değişikliği projenin çalışması sona erdiğinde kalkar. 

double Sayi, Sonuc;
System.Globalization.CultureInfo ulke;
ulke = new System.Globalization.CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = ulke;
Sayi = Convert.ToDouble(textBox1.Text);
Sonuc = Math.Round(Sayi, 2);
textBox2.Text = Sonuc.ToString();  

Sign() Metodu 

Sayısal bir sabit veya sayısal bilgi içeren değişkenin içeriğinin pozitif veya negatif olup olmadığını öğrenmek istiyorsanız Math sınıfının Sign() metodundan yararlanabilirsiniz. 

           
Math.Sign(Sayısal Bilgi) 

Bu metoda parametre olarak verilen sayısal bilgi negatif değere sahipse -1, pozitif ise 1 değerini geriye göndermektedir. Sign() metoduna parametre olarak verilen bilgi 0 içeriyorsa bu kez geriye 0 gönderilir. 

        
int Sonuc = Math.Sign(10);   // Sonuc 1 olur. 
         Sonuc = Math.Sign(-10);  // Sonuc -1 olur. 
         Sonuc = Math.Sign(0);       // Sonuc 0 olur. 
         int Sayi = 10; 
         Sonuc= Math.Sign(Sayi);  // Sonuc 1 olur. 

Abs() Metodu 

Bu metot bir sayının mutlak değerini bulmak için kullanılır. Abs() metodu mutlak değeri bulunmak istenen sayıyı parametre olarak alır ve geriye sayının mutlak değerini gönderir. Geriye gönderilen değer sürekli pozitiftir. Parametre olarak 0 verilmesi halinde Abs() metodu geriye 0, sıfırın dışındaki bütün değerler için sıfırdan büyük bir sayı gönderilir. 

        
Sonuc = Math.Abs(50);  // Sonuç 50 olur. 
         Sonuc = Math.Abs(-50);  // Sonuc 50 olur

Bu metodun işlevinin tam olarak anlaşılması için forma 2 TextBox yerleştirip aşağıda verilen satırları yazdık. Bu satırlar bir metoda yazılıp işletilirse ilk TextBox’a yazılacak tam sayı bilginin mutlak değeri alınıp 2. TextBox’a aktarılır. 

int mutlak = Math.Abs(Convert.ToInt32(textBox1.Text));
textBox2.Text = mutlak.ToString(); 

Ama formdaki ilk TextBox’a kesirli bir sayı girip bu kodu işletirseniz hata meydana gelir. Çünkü TextBox’ın içeriğini sayısal bilgiye dönüştürürken
Convertsınıfının ToInt32() metodunu kullandık. ToInt32() metodu yerine ToDouble() metodu kullanılırsa TextBox’a yazılacak kesirli sayının mutlak değeri alınabilir. 

Sqrt() ve Pow() Metotları 

Math sınıfının Sqrt() metodu pozitif bir sayısal değerin karekökünü bulmak amacıyla kullanılır. Sqrt() metodu ile negatif bir sayının karekökünü almak mümkün değildir. Sqrt() metodu geriye parametre olarak alınan sayının karekökünü gönderir. 

Math.Sqrt(Karekökü Alınacak Sayı) 

Karekökü alınmak üzere Sqrt() metoduna parametre olarak verilen sayı Single ise geriye Single, Double ise geriye Double bir değer gönderilir. 

int sayi = 144;
double sonuc = Math.Sqrt(sayi); // sonuc 12 olur 

C# üs alınırken kullanılacak bir operatöre sahip olmadığı için Math sınıfının Pow() metodu kullanılmaktadır. Örneğin 5 sayısının 3. kuvvetini bulmak istiyorsanız Pow() metodunu aşağıdaki gibi kullanabilirsiniz. Double tipinde 2 parametreye sahip olan bu metot geriye double bir değer göndermektedir. 

double Sonuc;
Sonuc = Math.Pow(5, 3); // Sonuc 125 olur. 

Math sınıfında tanımlı olan çok sayıda metot bulunmakla birlikte burada ancak birkaç tanesi hakkında bilgi verilebilindi. Pi() metodu ile PI sayısını elde edebilir, Max() metodu ile 2 sayıyı karşılaştırıp büyük olanı öğrenebilir, Log() metodu ile sayıların logaritmasını alabilir, Sin() metodu ile açıların sinüs değerlerini öğrenebilirsiniz. 

Random Sınıfı 

Bu sınıf rasgele sayı üretilmek istendiği zaman kullanılır. Elde edilmek istenen rasgele sayının belli değerler arasında olmasını istiyorsanız en yüksek değeri Random sınıfının Next() metoduna parametre olarak vermelisiniz. Random sınıfından yararlanılarak nasıl rastgele sayı elde edildiğini aşağıda görebilirsiniz. 

Random Rastgele = new Random();

int Sayi = Rastgele.Next(100);
textBox1.Text = Convert.ToString(Sayi);   

Bu kodda önce Random tipinde bir değişken tanımlayıp new anahtar kelimesi ile Random nesnesi hazırladık. Ardından Random sınıfının Next() metodunu kullanıp 0 ile 100 arasında değişen rastgele sayı elde ettik. 

Next() metodunu parametresiz olarak kullansaydık elde edilecek rastgele sayı Int32 tipindeki değişkenin alabileceği en büyük değer olurdu ve elde edilecek değer 0 ile 2147.483.647 arasında yer alırdı. Elde etmek istediğimiz rastgele sayının 10 ile 20 arasında olmasını istemiş olsaydık Random sınıfının Next() metodunu aşağıdaki gibi kullanırdık. 

Sayi = Rastgele.Next(10, 20); 

Random sınıfından yararlanıp Byte tipindeki dizi değişkenin elemanlarını rastgele bilgiler ile doldurmak istiyorsanız NextBytes() metodunu kullanmalısınız. Bu metodun nasıl kullanıldığını aşağıda görebilirsiniz. 

byte[] Dizi = new byte[10];
Random Rastgele = new Random();
Rastgele.NextBytes(Dizi); 

Bu örnekte önce 10 elemanlı byte tipinde bir dizi nesnesi hazırladık. Ardından bu nesneyi Random sınıfının NextBytes() metoduna parametre olarak vererek byte tipinde(0 ile 255 arasında) 10 sayının elde edilip dizi değişkenin elemanlarına aktarılmasını sağladık. NextBytes() metodunun işlevini net olarak görmeniz için forma bir ListBox yerleştirip bu koda ekleme yaptık. 

byte[] Dizi = new byte[10];
Random Rastgele = new Random();
Rastgele.NextBytes(Dizi);
for (int i=0; i<Dizi.Length; i++) 
   listBox1.Items.Add(Convert.ToString(Dizi[i]));    

Elde etmek istediğiniz rastgele sayı 0 ile 1 arasında kesirli bir sayı olacaksa bu kez Random sınıfının NextDouble() metodunu kullanabilirsiniz. 

Random Rastgele = new Random();
Double Sayi=Rastgele.NextDouble(); 

Yukarıda hakkında kısaca bilgi verilen Random sınıfı kripto işlemleri için yeterli değildir. .NET Framework ile birlikte verilen RandomNumberGenerator sınıfından yararlanıp değişik amaçlar için kullanabileceğiniz rastgele sayılar üretebilirsiniz. Bu sınıfı kullanabilmek için aşağıda verilen satır ile ilgili namespace koda dahil edilmelidir. 

using System.Security.Cryptography;
 

Bu kitapta sözünü ettiğimiz her konuyu veya .NET Framework ile gelen bütün sınıfları ayrıntıları ile anlatmaya çalışsaydık bu kitap bitmez veya birkaç ciltlik ansiklopedi olurdu. Bu nedenle RandomNumberGenerator sınıfı hakkında basit bir örnek vermekle yetineceğiz. Aşağıda verilen örnekte ilk olarak 10 elemanlı bir byte dizisi hazırladık. Rastgele hazırlamak istediğiniz sayının daha uzun veya kısa olmasını istiyorsanız byte tipindeki dizi değişkenin eleman sayısında değişiklik yapmalısınız. 

byte[] Dizi = new byte[10];
RandomNumberGenerator Sayi;
Sayi = RandomNumberGenerator.Create();
Sayi.GetBytes(Dizi);
string Str="";
for (int i = 0; i < Dizi.Length; i++) 
   Str = Str + Dizi[i].ToString();
textBox1.Text = Str; 

Devamında RandomNumberGenerator tipinde bir değişken tanımlayıp Create() metodu ile RandomNumberGenerator nesnesi hazırladık. Bu sınıfın GetBytes() metodu parametre olarak aldığı byte dizisinin içeriğini rastgele doldurmaktadır. Aşağıda verilen ekran görüntüsünü bu kodu işlettikten sonra aldık. Her seferinde farklı sonuçlar alınır.



HexaDecimal Sayıları Dönüştürmek 

.NET Framework ile gelen Convert sınıfından yararlanıp 10 tabanlı sayısal bilgiyi ToString() metodu ile 16 tabanlı sayı formatında string değişkene aktarabilirsiniz. Bu işlemin nasıl yapıldığını aşağıda görebilirsiniz. 

int Sayi = Convert.ToInt16(textBox1.Text);
textBox2.Text = Sayi.ToString("X"); 

Şimdi bu işlemin tersini .NET Framework ile gelen Int16 sınıfının Parse() metodu ile yapacağız. Bu amaçla önce System.Globalization.NumberStyles tipinde bir değişken tanımlayıp bu değişkene HexNumber işlevini yükledik. 

System.Globalization.NumberStyles Bolge;
Bolge = System.Globalization.NumberStyles.HexNumber;
int Sayi = System.Int16.Parse(textBox1.Text, Bolge);
textBox2.Text = Sayi.ToString();   

Sayıların Logaritma Almak ve Faktöriyelini Bulmak 

Bir sayının logaritmasını almak istediğinizde Math sınıfının Log10() metodundan yararlanabilirsiniz. Bu metodun nasıl kullanıldığını anlatmak için forma 2 ListBox ve 2 düğme yerleştirdik. “Logaritma” adını verdiğimiz düğme tıklandığında işletilmek üzere aşağıda verilen kodu hazırladık. 

private void logaritma_Click(object sender, EventArgs e) 
 
   double j; 
   string str; 
   for (int i = 1; i <= 10; i++) 
   
      j = Math.Log10(i); 
      str = Convert.ToString(i) + " - " + Convert.ToString(j); 
      listBox1.Items.Add(str); 
    }


Bu kod sayesinde 1’den 10’a kadar sayıların logaritmaları Math sınıfındaki Log10() metodu ile bulunup formdaki ilk ListBox’a aktarılır. Birden 10’a kadarki sayıların faktöriyelini bulmak amacıyla “Faktoryel” adını verdiğimiz düğme için aşağıda verilen kodu hazırladık. Faktöriyel bulmak amacıyla hazırladığımız kodu metot olarak düzenleyip istediğiniz sayının faktöriyelini bulabilirsiniz. 

private void faktoryel_Click(object sender, EventArgs e) 
 
   long Sonuc = 1; 
   for (int i = 1; i <= 10; i++) 
   
     for (int j = 1; j <= i; j++) 
     
        Sonuc = Sonuc * j; 
     
     listBox2.Items.Add(Convert.ToString(i) + "! - " +Convert.ToString(Sonuc)); 
    Sonuc = 1; 
   }


Binary Sayıyı Decimal’a Dönüştürmek

Şimdi vereceğim örnek ile 2 tabanlı sayıyı 10 tabanlıya dönüştüreceğiz. Kullanıcı 2 tabanlı sayıyı ilk TextBox’a yazıp aşağıda verilen kodu işletecektir. 

private void Form1_Click(object sender, EventArgs e) 
 
   int Sayi=0; 
   string Str =textBox1.Text; 
   int Uzunluk =Str.Length; 
   char[] Dizi = Str.ToCharArray(); 
   for (int i=Uzunluk-1; i>-1; i--) 
   
      Sayi +=Convert.ToInt16(Dizi[Uzunluk -(1+i)].ToString()) *(int)Math.Pow(2, i);  
    
    textBox2.Text = Convert.ToString(Sayi); 
  

Bu kodda önce TextBox’a Binary olarak yazılan sayının her karakterini Char tipindeki dizi değişkene aktardık. Devamında dizi değişene aktardığımız karakterleri tek tek alıp int tipine çevirip Math sınıfının Pow() metodu ile üslerini aldık. Aşağıda verilen ekran görüntüsünü ilk TextBox’a 2 tabanlı bir sayıyı girip bu kodu işlettikten sonra aldık.



Şimdi bu 2 tabanlı sayının el ile nasıl 10 tabanlıya yapılabildiğini göstereceğiz. Bu sayede yazılanlar kod kolay anlaşılabilir. 
 

1 x 2 0 = 1
0 x 21 = 0
1 x 2 2 = 4
0 x 2 3 = 0
0 x 2 4 = 0
1 x 2 5 = 32
Toplam= 37

 * Meraklısı İçin Notlar
Bu bölümü okuyanların benzer konular için başka kaynaklara başvurma ihtiyacı kalmaz. Diğer yandan bu bölümün kolay okunma dışında başka kaynaklara fazla bir üstünlüğü olmasa bile kapsam olarak açık ara öndedir.

C# 3.0 Kitabı 10.11.2009 18:59:22

1 YORUM


YorumlarYorum Yaz
Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS | İletişim
Memik Yanık 2004-2009 © Tüm Hakları Saklıdır.
Hazırlayan www.semgoksu.com