Giriş
Bu yazının 1.bölümünde (C# String Methodları – I) EndsWith-StartsWith, ToUpper-ToLower, IndexOf, PadLeft-PadRight, Remove methodlarını anlatmaya çalıştım. Bu yazımda da bahsetmek istediğim 5 tane daha string methodu var.
String method ları bizim sıkça kullanacağımız ve ihtiyaç duyacağımız methodlardır. Hepimizin şimdiye kadar aşağıdaki durumlar ile ya karşılaştık ya da karşılaşacağız;
- String içerisindeki bir string i değiştirme,
- String içerisinde belli bir yerden, belli bir sayı kadar karakter alma,
- Bir string i karakterlerine ayırma,
- String in başlangıcındaki ve/veya bitimindeki boşlukları silme,
Bu ve benzeri işlemleri yapmak için bu yazımda anlatacağım String Methodlarını kullanacağız. Bu yazımda anlatacağım Methodlar; Replace, SubString, ToCharArray, Trim
Hatırlatma ve Dikkat Edilmesi Gerekenler
Bu örneği C# dili ile .net 4.0 versiyonunda Visual Studio 2010 Ultimate programında yazıyorum.
Mantık Yürütme
Türkçe temelli dünyaca geçerli bir programlama dili geliştiremediğimiz için diğer dillerde, tabiki de ingilizce, geliştirilen programlama dillerini kullanıyoruz. Eğer biraz ingilizce bilginiz varsa methodları gördüğünüzde anlayabilir, açıklamalarına dikkat ederek kullanabilirsiniz. Hadi başlayalım.
Kodlama
*Replace
Kullanımı bazen oldukça işine yarabilir. String içerisinde bir string i başka bir string ile değiştirebilirsiniz veya string içerisinde karakteri(char) başka bir karakter ile değiştirebilirsiniz. İlk önce değiştireceğimiz stringi veya char ı daha sonrada değişlik için kullanacağımız stringi veya char ı yazıyoruz.
kelime = "Buradaki tüm a harfleri büyük"; MessageBox.Show(kelime.Replace('a', 'A')); // tek tırnak ile tanımladık, yani char türünde, çıktı olarak "BurAdAki tüm A hArflari büyük" kelime2 = "C# %100 nesneye yönelimli bir programlama dilidir. "; MessageBox.Show(kelime2.Replace("neseneye yönelimli", "nesne tabanlı")); // ekran çıktısı: "C# %100 nesne tabanlı bir programlama dilidir"
*SubString
Benim çok sevdiğim ve kullanışını oldukça başarılı bulduğum bir method. String içerisinde belli bir karakterden sonraki bölümü seçmemiz yarar. 2 türlü kullanımı vardır;
1. Kullanım
string kelime = "Mahmut Can Sözeri"; //Burada "M" 0.karakterdir. Bunu unutmamak gerekiyor MessageBox.Show(kelime.Substring(7,3)); //Ekran çıktısı olarak "Can" ı verecektir. 7.karakterden başlayarak 3tane seçim yapar. Duzeltme: Yukaridaki SubString(6,3) iken sonuc " Ca" dir.
2. Kullanım
string kelime = "Mahmut Can Sözeri"; MessageBox.Show(kelime.Substring(6)); //Ekran çıktısı olarak "Can Sözeri" yi verecektir. 6.karakterden başlayarak son karaktere kadar seçim yapar.
*ToCharArray
String içeriğini karaktere ayırır. 2 türlü kullanımı vardır;
1.Kullanım
char[] karakterler = kelime.ToCharArray(); // Anahtar bölüm işte burası, burada karakterler adında char türünde bir dizi oluşturuluyor ve içerisine atılıyor. Yani aşağıdaki foreach yerine karakterler[sayi] diyerek ulaşabilirsiniz. foreach (char karakter in karakterler) // Foreach bu tarz işlemler için tam anlamıyla biçilmiş kaftandır. Örnekte iyi olacağını düşünüyorum { listBox1.Items.Add(karakter); // Bu bölümde bulunan karakterleri listbox1 a sırayla ekliyor. Yani ekran çıktısı olarak sırasıyla alt alta;M,A,H,M,U,T, ,C,A,N, ,S,Ö,Z,E,R,İ dir. Boşluklarında dahil olduğunu unutmayalım. Burada bir if kontrolü ile boşlukları eklemeyebiliriz. }
2.Kullanım
char[] karakterler = kelime.ToCharArray(3,5); //SubStringteki mantık ile çalışır yani 3.index numarasından başlar ve daha sonraki 5 karakteri alır.
*Trim
Özellikle web uygulamalarında çok yaygın şekilde kullanılan bir uygulamadır trim. Bir string in başlangcındaki ve bitişindeki boşlukları temizler ve bize sadece yazılan içeriği yani anlamlı bölümü verir. TrimEnd ve TrimStart gibi methodlardan mevcuttur. Bunları burada anlatmayacağım. Uygulamalar yaptığımda eğer gerekirse kullanırım ve bunları paylaşırım.
Kullanım
string kelime = " Mahmut Can Sözeri "; MessageBox.Show(kelime.Trim()); //Ekran çıktısı olarak "Mahmut Can Sözeri" yi verecektir. Kenardaki boşluları almayacaktır. Bu örneği iyi anlamak için önce boşluklu halinin Length ile uzunluğunu alıp daha sonra bu işlem sonucunda aldığınızda aradaki farkı göreceksiniz.
İndirme
İndirme linkini bir kaç güne aktif edeceğim.
Umarım faydalı olmuştur.
İyi kodlamalar
#1 by ali on November 16, 2011 - 3:25 am
C# dilini daha yeni öğreniyorum anlamını çözemediğim kodları internetten araştırıyorum sizin açıklmalarınız gerçekten çok sade ve anlaşır. Emeğinize sağlık
birde “enumerator” kodunun işlevi nedir anlatırsanız bana çok faydası olacak.
#2 by Mahmut Can Sozeri on February 11, 2015 - 9:01 am
Merhaba,
Şu örneği inceleyebilirsiniz, oldukça faydalı ve anlaşılır:
http://www.c-sharpcorner.com/UploadFile/prasadh/Enumerators11132005232321PM/Enumerators.aspx
İlginiz için teşekkürler.
#3 by c# cı smy on April 16, 2012 - 8:34 pm
gerçekten çok yararlı oldu emeğiniz için teşekkür ederim 😀
#4 by Mahmut Can Sözeri on April 16, 2012 - 10:21 pm
Rica ediyorum. Faydalandıysanız ne mutlu. Kolay gelsin
#5 by Obs on June 10, 2012 - 1:50 pm
Bugünkü sınavımda hayat kurtarıcı oldu bu bilgiler.Teşekkürler 🙂
#6 by Emrah ipekyol on August 20, 2012 - 3:34 pm
Teşekkürler emeğinize sağlık.
#7 by Cenk Eren on September 5, 2012 - 10:52 pm
Sade ve anlaşılır anlatım. Gerçekten işime yaradı.Teşekkürler
#8 by ragıp on March 26, 2014 - 7:26 pm
ne işine yaradı gözünü sevdüğüm bi halta yaramadı bu kodlar
#9 by furkan on September 22, 2012 - 6:02 pm
Yazının yarısına gelmede bu sitenin yer imlerimin en başında yer alması gerektiğini anladım 😀
Çok teşekkür ederim paylaşımlarınız gayet güzel ve başaraılı.
#10 by Mahmut Can Sözeri on September 24, 2012 - 8:59 pm
Rica ediyorum. Faydalı olmasına sevindim.
İyi günler
#11 by elif on March 25, 2013 - 8:08 pm
string kelime = “Mahmut Can Sözeri”;
MessageBox.Show(kelime.Substring(6,3)); bunu kimse denedemidi mi ? çıktısı ” ca” şeklinde oluyo
#12 by Mahmut Can Sozeri on May 3, 2013 - 9:02 am
Elif Hanim merhaba,
Evet soylediginiz gibi ciktisi ” Ca” seklinde olmaktadir. …kelime.SubString(7,3) olarak calistirdigimizda sonuc “Can” olmaktadir. Burada 6. index teki bosluk alinan 1.karakterdir. “C” ve “a” da diger 2 karakter.
Tesekkurler ilginiz icin
#13 by Örümcek Adam on December 8, 2013 - 9:47 am
Yararlı. Teşekkürler
#14 by Murat on December 26, 2013 - 12:16 am
Bu sadece ve güzel anlatımın için teşekkür ederim, çok yararlı olmuş.
#15 by Şerife on June 4, 2015 - 6:08 pm
c# da yaklaşık 100 tane radio buton var ve ben bu radio butonların hepsinin check özelliğini false yapmak istiyorum. for each kullanamam çünkü 20-30 tane de frame içindeler. for döngüsü ile yapmak istiyorum ama nasıl yapacağımı bir türlü bulamadım. yardımcı olabilirseniz çok sevinirim. bu arada anlatımınız çok güzel teşekkür ederim.
#16 by Mahmut Can Sozeri on July 8, 2015 - 7:17 pm
Selamlar,
Burada yapılabilecek en iyi mantık şu olur; recursive olarak bir metot oluşturursunuz. Bu metot sürekli kendini çağırarak her bir kontrolün içerisinde de radio button olmasını inceler. Eğer bana bir email atarsanız örneğinizi size çözüm için örnek kod yollayabilirim vaktim olduğunda.
İyi çalışmalar
#17 by pandora on December 23, 2015 - 6:04 am
Hocam çok teşekkürler. SubString olayınız sayesinde uygulama projem bitecek gibi.çok sağolun. o komut sayesinde “yyyy.mm.dd” şeklindeki tarihten yıl verisini kırpıp aldım sağolun
#18 by Hamza Şentürk on January 14, 2016 - 9:24 am
Merhabalar hocam;
substring 1.kullanımında hata yapmışsınız düzeltme diyip “ca” demişsiniz doğru cevab messagebox’da Can diye ekrana çıkıcaktır.
#19 by Mahmut Can Sozeri on January 14, 2016 - 9:28 am
Selamlar Hamza Bey,
Düzeltme diye yazdığım SubString(6,3), fakat Can’ın dönmesi için 7,3 olması gerekmektedir. Tekrar kontrol edebilir misin?
İyi çalışmalar
#20 by melek on November 10, 2016 - 3:55 pm
merhabalar hocam ben split methodunda dizilerimi bosluk göerene kadar ayırıp diziye atıyor ama onların indislerine ulasamıyorum nasıl ulasa bilirim
#21 by Mahmut Can Sozeri on November 10, 2016 - 4:00 pm
Selamlar,
string[] dizi = (“5,6,7,8,9,10″).Split(‘,’) dediğinizde for döngüsü ile döndüğünüzde dizi[i] diyerek ideksine ulaşabilirsiniz. Örneğin burada 10 sayısının index numarasını elde etmek istiyorsanız: Array.FindIndex(dizi,”10”)); dediğinizde geriye döndürecektir. Yani Array.FindIndex metodunu kullanabilirsiniz.
Faydalı olması dileğiyle.
#22 by Taner H. on November 28, 2017 - 5:01 pm
Benim şu tip bir ihtiyacım var web sayfa içindeki paragraflardan birinde @adsoyad, @vergino gibi değişkenlerim var. Web sayfasını kelime değişkenine nasıl atarım. Onu atınca sanırım replace komutu görevini yapacak ???
#23 by Mahmut Can Sozeri on January 24, 2018 - 11:00 am
Hayırlı günler Taner Bey, burada web sayfası dediğiniz hangi teknoloji kullanıyorsunuz? Sorunun cevabı buna göre değişebilmektedir.
#24 by hasan tirtom on March 15, 2018 - 8:43 am
Hocam kolay gelsin visualstudio C# da combobox’dan ocak 2018 gibi bir değeri seçip buna değere göre database de (access) tarih değerine göre arama yaptırmak istiyorum. Yani Ocak 2018 seçildiğinde 01.01.2018 – 31.01.2018 arasındaki kayıtları getirsin istiyorum. Bunu nasıl yapabilirim?
comboboxtan gelen değeri string türünde bir değişkene tanımlayıp ilk 4 karaktere göre ay değerini bulup sonuna yılı ekleyerek bir arama yaptırmayı düşündüm ama içinden çıkamadım. yani “TEMM” değerini gördüğünde “07” alıp sonuna son 4 karakteri eklesin “2018” sonra arama yapsın gibi düşünmüştüm.
#25 by Mahmut Can Sozeri on October 9, 2018 - 7:19 am
Merhaba Hasan Bey, burada aslında temel olarak yapmak istediğiniz bir listeleme işlemi. Bunu örneğin SQL’de bir script oluşturarak, parametre olarak tarihi gönderebilirsiniz. Tarihi gönderirkende isterseniz DateTime’a gün, ay, yıl olarak verebilirsiniz.
#26 by Melike Bulut on March 13, 2019 - 9:29 pm
Hocam bir sorum olucaktı. Mesela “if” komutunu değiştirebilir miyiz “split” metodu ile ve değiştirdiğimiz komutun doğru olup olmadığını ekrana yazdırabilir miyiz?
#27 by Mahmut Can Sozeri on March 14, 2019 - 7:32 am
Selamlar Melike Hanım, tam olarak anlayamadım. Kod örneği paylaşabilirseniz dönüş yapayım.
#28 by Melike Bulut on March 14, 2019 - 12:44 pm
Haklısınız hocam. Mesela c# da normal olarak kullandığımız if komutu nasıl ;
if(koşul){
komutlar;
}
bu şekildedir. Biz bunu strring, split, dizi, for, if kullanarak;
if(koşul) komut
haline getirebilir miyiz.
#29 by Mahmut Can Sozeri on March 14, 2019 - 1:41 pm
if (true) var dizi = “Mahmut Can”.split(” “);
yapılabilir. If ile birlikte komutlar dediğiniz yere eklemeleri yapabilirsiniz.
#30 by Tunahan on December 29, 2019 - 12:48 am
Hocam benim bir sorum olacak. C# ta belirli karakterlerden sonra sadece o karakterlerin önüne kelime eklemem istiyorum bunu nasıl yapabilirim. Örneğin elimde bir paragraf var bu paragraftaki virgüller den sonra kelime eklemek. yani;
Okunan dosyada ‘ , ‘ işareti görülen yerlerden sonra ‘ dene’ kelimesi eklenmeli.
asefasef,”dene”aesfase,”dene”asefase,”dene”asefaseasef,”dene”asefasefase,”dene” gibi…
yardımcı olursanız çok sevinirim.
#31 by Mahmut Can Sozeri on December 30, 2019 - 7:11 am
Selamlar Tunahan Bey, en kolay yöntem şu aolabilir. Örneğin cümle şu olsun: var txt= “ali ata baktı, sonra, bir daha baktı.” Burada “,” den önce veya bir kelime ya da karakterden önce ekleme yapmak istiyorsanız. txt = txt.Replace(“,”,”OneKoyulacakHarfveyaKelime,”) çalışacaktır.
#32 by YAVUZ ARSLAN on May 16, 2020 - 3:14 am
Hocam iyi günler ben tesseract OCR kütüphanesi kullanarak bir görüntüden sayıları listboxa çektim bu sayıların arasında dört işlem simgeleri de var. Yapmaya çalıştığım şey bu sayıları aralarındaki işaretlere göre işleme sokmak. Bu matematiksel işlemi nasıl yapabilirim yardımcı olursanız çok mutlu olurum.
#33 by Mahmut Can Sozeri on May 16, 2020 - 11:25 am
Selamlar Yavuz Bey, bu konuda bir kaç yöntem var aslında yapılması için. Şu link sizlere faydalı olacaktır: https://stackoverflow.com/questions/333737/evaluating-string-342-yield-int-18 tekrar bir durum olursa yazabilirsiniz. İyi günler dilerim.
#34 by Nuri Ahmet Şimşekli on May 23, 2020 - 12:10 am
Barkod no : 01086995464934012166GA4DEE671721060410ECAB103788
01 ile başlayan firma kodu
21 ile başlayan seri numarası (değişken uzunluk olabiliyor) en fazla 20 karakter
17 ile başlayan yyaagg
10 ile başlayan parti no (değişken uzunluk olabiliyor) en fazla 20 karakter
Yani bu barkodu ayrıştıracaz.
Firma kodu : 08699546493401
Seri No : 66GA4DEE67
Üretim Tarihi : 210604
Bunu c# da nasıl ayrıştıracaz 🙄🙄
Şimdiden teşekkürler
#35 by Mahmut Can Sozeri on May 25, 2020 - 3:27 pm
Selamlar Nuri Ahmet Bey,
Öncelikli olarak eğer burada ihtiyaca göre substring ve find metotları kullanılabilir. Çünkü burada eğer sabit karakter sayısında firma kodu, seri numarası, parti no ayrıştırılıyorsa sadece SubString yeterli olacaktır. Örneğin;
string barkod = “01086995464934012166GA4DEE671721060410ECAB103788”;
string firmaKodu = barkod.Substring(0,2); //01 gelecektir.
Diğerlerinde hangileri belirli bir uzunluğa sabit ise mesela seri numarası değişiklik uzunluk olabilir demişsiniz. Mesela üretim tarihi alınabilir. Burada örneğin X karakterinden sonra firma kodu gelir gibi bir ibare var ise bu durumda söylediğim gibi öncelikli olarak Find ile bu X karakterinin hangi indexte olduğu bulunmalıdır. Sonrasında ise bu index’e göre ayrıştırma yapılabilir.
Kolay gelsin.