string tekSatir = "Bu tek satır string'e örnektir";
string cokSatir = @"Bu da
birden fazla satır
string'e örnektir";
String değişkenlerin içinde kullanabileceğimiz özel karakterler vardır. Başında ters kesme işareti “ \ “ olan bu işaretlere string-literal denir. Örnek:
string tab = "C# \t en sevdiğim programlama dilidir."; //C# en sevdiğim programlama dilidir.
string tirnakİsareti = "C# \"benim\" en sevdiğim"; //C# “benim” en sevdiğim
string tirnakİsareti2 = @"C# ""BENİM "" en sevdiğim"; //C# “BENİM” en sevdiğim
//alttakilerin ikisinin de çıktısı: \\server\share\file.txt
string tersKesme = "\\\\server\\share\\file.txt";
string tersKesme2 = @"\\server\share\file.txt";
string cokluSatirLiteral = "C# \r\nbenim\r\nen sevdiğim";
- \r (Carriage Return) bulunduğu satırın başına gitmek, \n (Line Feed) yeni satıra geçmek için kullanılır
- Her \r\n’ den sonra yeni satır açılıp satırın başından başlanır.
- @ işareti ile başlayan string’ler (verbatim string) için string-literal kuralları geçerli değildir. Ters kesmeyi nasıl yazıyorsanız öyle gözükür.
- Bilgisayarda notepad’e kayıtlı dosyayı okutma:
string text = System.IO.File.ReadAllText(@"c: \benioku.txt");
Console.WriteLine(text);
String İşlemleri:
string[] text = new string[5]; //5 elemanlı bir string dizisi tanımladık
//Aşağıda tanımlanan tüm textlerin çıktısı: "Hava sıcaklığı 7 Celcius 46 Fahrenheit"
text[0] = "Hava sıvaklığı 7 Celsius 46 Fahrenheit";
text[1] = "Hava Sıcaklığı " + 7 + " Celsius " + 46 + " Fahrenheit ";
text[2] = string.Format("Hava sıcaklığı {0} Celsius {1} Fahrenheit", 7, 46);
//Celsius ve Fahrenheit değerleri değişken içinde olsaydı
int celsius = 7;
int fahrenheit = 46;
text[3] = "Hava sıcaklığı " + celsius + " Celcius " + fahrenheit + " Fahrenheit";
text[4] = string.Format("Hava sıcaklığı {0} Celsius {1} Fahrenheit", celsius, fahrenheit);
for (int i = 0; i < text.Length; i++)
{
Console.WriteLine(text[i]);
}
- String.Format kullanımı(Döngü olmayan yerde okunmayı kolaylama için)
int pay = 5;
int payda = 7;
string sonuc = string.Format("Kesirli sayılarda, {0}/{1} örneğinde olduğu gibi, {0} pay, {1} paydadır.", pay, payda);
Console.WriteLine(sonuc); //Kesirli sayılarda, 5/7 örneğinde olduğu gibi, 5 pay, 7 paydadır.
STRING İFADELERİ AYRIŞTIRMAK
- Remove kullanarak;
string original = @"Bir string değişkenin boyutu 32bit sistemlerde 2GB ile sınırlıdır.";
Console.WriteLine(original.Remove(10)); //ÇIKTI: Bir string (10 no'lu karakterden sonrası silinir.)
Console.WriteLine(original.Remove(19, 27)); //ÇIKTI: Bir string değişken 2GB ile sınırlıdır. (19-27 arası karakterleri siler.
- IndexOf kullanarak;
string original2 = @"Bir string değişkenin boyutu 32 bit sistemlerde 2GB ile sınırlıdır."; // Sadece 32 bit kısmını çıkartalım.
Console.WriteLine(original2.Remove(original2.IndexOf("32bit"), "32bit ".Length));
/*original2.IndexOf("32bit") metodunu kullanarak 32bit ifadesinin original2 içerisindeki konumunu saptıyoruz. Sonuç: 29 dönecektir. Kaç karakter keseceğimizi bulmak için "32bit ".Length metodunu kullanırsak bize 6 dönecektir. Kısaca(29, 6) demek istiyoruz. */
- Başta ve sondaki boşlukları kesmek için;
string fullname = " Gökalp G ";
Console.WriteLine(fullname.Trim()); //baştaki ve sondaki boşlukları keser
Console.WriteLine(fullname.TrimStart()); //sadece baştaki boşlukları keser
Console.WriteLine(fullname.TrimEnd()); //sadece sondaki boşlukları keser
- Karakter ekleyerek yazdırmak için;
string name = "Gökalp";
string surname = "G";
Console.WriteLine(name.PadRight(10, '*') + surname.PadLeft(10, '*'));
//Çıktı: Gökalp**********G
Console.WriteLine(name.PadRight(10) + surname.PadLeft(10));
//Çıktı: Gökalp G
//10 ya da 10+10 yıldız koymuyor. Yazdığımız ifadeden boşta kalan kısmı 10'a tamamlayacak sayıda yıldız koyuyor. 2. satırda da bu sayıda boşluk koyuyor.
- Split( ) metodu ile bölme;
string numbers = "birinci;ikinci;üçüncü";
string[] splitted = numbers.Split(';');
Console.WriteLine("Ayrılmış : ");
Console.WriteLine(splitted[0]);
Console.WriteLine(splitted[1]);
Console.WriteLine(splitted[2]);
/*ÇIKTI:
birinci
ikinci
üçüncü */
- String değişkeni birden fazla karakterden bölmek istiyorsak; Burada çok karışık bir string değişken kullandık. İçerisinde ; ‘ ‘ ve, geçiyor. Split metoduna string’i bölmesi için, bir dizi içinde 3 karakteri de verdik. Ayrıca değişkenimizin düzensiz olduğunu bildiğimiz için StringSplitoptions.RemoveEmptyEntries parametresi ile bölme yaptıktan sonra boş kalan dizi elemanlarını dikkate almamasını istedik. Split sonucunda 8 elemanlı bir dizi ortaya çıktı.
string complexInput = " ; , bir;iki,üç dört ; beş altı,yedi,,,on";
string[] complexSplitted = complexInput.Split(new[] { ';', ',', ' ' });
StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(string.Format("Dizi eleman sayısı: {0}",complexSplitted.Length));
foreach (string item in complexSplitted)
{
Console.WriteLine(item);
}
- String değişkenini Join metodu ile birleştirme;
string[] stringArray = { "birinci", "ikinci", "üçüncü" };
string joined = string.Join(";", stringArray);
Console.WriteLine("Birleştirilmiş : " + joined); //ÇIKTI: Birleştirilmiş : birinci;ikinci;üçüncü
STRING ARAMA METODLARI
IndexOf ile pozisyon saptamayı görmüştük. String’in benzer metodlarını inceleyelim.
string tekerleme = "bir berber bir berbere bre berber gel beraber berberistanda bir berber dükkanı açalım demiş";
int a = tekerleme.IndexOf("bir"); //bir'in geçtiği ilk indeks : 0
int b = tekerleme.LastIndexOf("bir"); //bir'in en son geçtiği pozisyon : 60
int c = tekerleme.IndexOfAny(new char[] { 'ü', 'ş' }); //ü veya ş'nin ilk geçtiği pozisyon : 72,
YALNIZCA KARAKTERLER İÇİN KULLANILIR
int d = tekerleme.LastIndexOfAny(new char[] { 'ü', 'ş' }); //ü veya ş'nin son geçtiği pozisyon : 90, YALNIZCA KARAKTERLER İÇİN KULLANILIR
bool x = tekerleme.StartsWith("bir"); //true, değişkenin başı bir'mi diye kontrol eder
bool y = tekerleme.EndsWith("demiş"); //true, sonu demiş'mi kontrol eder
bool z = tekerleme.Contains("ber"); //true, değişkenin içinde ber geçiyor mu kontrol eder
STRING KARAKTER DÖNÜŞÜMLERİ VE ÇOKLU DİL DESTEĞİ
- String değişkenlerde büyük-küçük harf değişimi yapma;
string text = "bu string Değişken biraZ FARKLI";
Console.WriteLine(text.ToLower()); //bu string değişken biraz farklı
Console.WriteLine(text.ToUpper()); //BU STRİNG DEĞİŞKEN BİRAZ FARKLI
- Türkçe yazılan bir kodun yabancı dil ayarlı bilgisayarlarda sorun yaşamaması için (I-i ayrımı vs.) aşağıdaki kodu kullanmalıyız;
Console.WriteLine(text.ToLower(CultureInfo.GetCultureInfo(“tr-TR”)));
Console.WriteLine(text.ToUpper(CultureInfo.GetCultureInfo(“tr-TR”)));
- Noktalama işaretleri de Türkçe ve yabancı diller arasında farklı olabilir.(Nokta kullanılan yerde virgül kullanılması vs.) Bu durumda;
double a = double.Parse("3,45"); //Sonuç Türkçe :3,45 Yabancı Dil'de:3.45
double b = double.Parse("3.45"); //Sonuç Yabancı Dil'de: 3.45
//Bu basit örnekte bile 10 basamak değişiyor. Sorun yaşamamak için;
CultureInfo culture = new CultureInfo("tr-TR");
double c = double.Parse("3,45", culture.NumberFormat);
double d = double.Parse("3.45", culture.NumberFormat);
Console.WriteLine(c);
Console.WriteLine(d);
- Eğer her ortamda o ortamın ayarlarına göre hesap yapmak istiyorsak, CultureInfo’yu dinamik kullanmalıyız;
CultureInfo culture = CultureInfo.CurrentCulture;
STRING İŞLEMLERİNDE REGULAR EXPRESSIONS KULLANIMI
Regex ile bir string içinde arama, değiştirme, bölme işlemleri yapabiliriz. Bir string değişkenin telefon numarası gibi belli bir kurala uyup uymadığını kontrol edebiliriz.
Öncelikle aşağıdaki kütüphaneyi ekliyoruz;
using System.Text.RegularExpressions;
Ardından aşağıdaki kodu çalıştırabiliriz;string text = "Marketten 15 adet kalem aldım"; //içinde arama yapabileceğimiz text
string pattern = @"\d+"; //arama kriterimiz
// \d ile özel bir decimal alanı bulmasını istiyoruz, + işareti ise en az bir uzunluk olmasını söylüyor. Eğer \d{2} kullansaydık tam 2 uzunlukta bir decimal alan, \d{1, 2} kullansaydık en az 1 en çok 2 uzunlukta bir decimal alan bulmasını isteyecektik.
Regex regex = new Regex(pattern); //Regex'in bir kopyasını arama kriterimiz ile alıyoruz
Match match = regex.Match(text); //Text içinde eşleştirme yapıyoruz
Console.WriteLine("Sonuç Bulabildik mi? " + match.Success);
Console.WriteLine("Sonuç: " + match.Value);
/*ÇIKTI : Sonuç Bulabildik mi? True
Sonuç: 15 */
- Regex ile string.Replace( ) metoduna benzer işler de yapabiliriz;
string input = "Aslında C#.Net VB.Net'ten çok farklıdır.";
string output = Regex.Replace(input, "N.t", "NET");
/*bütün N.t patterni geçen yerleri NET ile değiştir. Aradaki . ifadesi N ile t arasında herhangi bir karakterikabul etmemize yarar. */
Console.WriteLine(output);
//ÇIKTI: Aslında C#.NET VB.NET'ten çok farklıdır.
- Regex işimize en çok bu durumlarda yarayacaktır;
- Kullanıcı girişini kurallı bir şekilde kontrol etmek istediğimizde (validasyon)
- HTML sayfasının içinde bir şey bulmak, parse etmek için,
- Text dosyalarında arama ve değiştirme (find & replace) yapmak için.
Hiç yorum yok:
Yorum Gönder