C# Char ve String Veri Türleri



Char ve String Veri
Türleri

C programlama dilinde
string adında bir veri türü yoktur. C dili string veri türü
yerine char adında bir veri türüne sahiptir. char veri türü ile
meselâ B, x veya * gibi tek karakter ifade edilir. Eğer bir
yazıyı değişkende saklamak gerekirse char türünden bir dizi
oluşturmak gerekir. Karakterlerin bir dizisi olarak yazı ifade
edilir.

C# programlama
dilinde de char veri türü vardır ( .net Framework içerisindeki
String.Char yapısının bir aliası olarak ). Fakat C dilindeki
char ile C# dilindeki char arasındaki benzerlik sadece isim
benzerliğidir. İşlevleri ve yapıları farklıdır. C# dilinde bir
karakter dizisini string ifadeye, string ifadeyi de karakter
dizisine dönüştürmek mümkündür; fakat “string veri türü yalnızca
bir karakter dizisidir” demek doğru değil, çünkü string kendi
başına bir veri türüdür.

Diğer bir farklılık:
Tüm programlama dilleri karakterleri temsil etmek için sayıları
kullanırlar, fakat C dilinde char veri tipi int, long ve short
gibi nümerik bir veri tipidir. Ayrıca C dilinde karakter türü
değişkenleri, signed char (işaretli karakter) veya unsigned char
(işaretsiz karakter) olarak bildirebiliriz.

C dilinde char
türündeki veri 8 bit uzunluğunda ve bir ASCII karakteri temsil
etmektedir. C# dilinde ise char türündeki veri 16 bit
uzunluğunda ve Unicode karakteri temsil etmektedir.

C# dilinde
karakterleri ve sayıları birbirine karşılıklı dönüştürebilmenize
rağmen char veri tipindeki değerler sayı değildir.

Unicode karakterler
ve nümerik karşılıklarını şu adreste görebilirsiniz: http://www.unicode.org
/charts

srting bir ifade,
çift tırnaklar arasında yazılır, 0 ya da daha fazla karakterden
oluşur. Tek bir karakteri ise tek tırnak arasında yazmak
gerekir. Aşağıdaki örnekte char türü bir değişken tanımlaması
yapılmıştır ve tanımlanırken de ilk değer ataması yapılmıştır.

char ch = 'Z';

C# dilinde
karakterden nümerik tiplere dönüştürme işlemini casting yaparak
gerçekleştirebilirsiniz.

int i=10;
i = (int) '7';

i değişkeninin yeni
değeri 7 değil de 55 olur. Niçin böyle oldu? 7 karakterinin
ASCII ve Unicode karşılığı 55 olduğu için casting işlemi sonucu
i değişkeni 55 değerini aldı.

Şimdi de casting
yaparak bir karakterin ascii değerini ifade eden tamsayıyı
karakter türü bir değişkene atayalım.

char ch = ‘y’;
ch = (char) 97;

ch değişkeninin
değeri ‘a’ harfi olacaktır. Çünkü a harfinin ascii ve Unicode
karşılığı 97’dir.

Eğer, aritmetik
işlemde sayı ve karakteri yan yana kullanırsak kapalı dönüşüm de
kendiliğinden yapılır.

İnt i;
i = 'a' + 5;

Yukarıdaki işlemin
sonucu da 102 olacaktır, çünkü a karakterinin ASCII ve Unicode
karşılığı 97 dir. Dolayısıyla C#, karakteri kapalı dönüşüme tabi
tutacaktır.

Yine aynı şekilde bir
karakter ile bir string ifade birleştirme işlemine tabi
tutulursa, karakter kapalı dönüşüm ile string ifadeye
dönüşecektir.

string str;
str = "a" + 'b'

Yukarıdaki işlemin
sonucu “ab” string ifadesi olacaktır.

Fakat aşağıdaki işlem
sonucunda 195 sayısal ifadesi çıkar.

i = 'a' + 'b';

String sınıfının .net
framework içerisindeki bir diğer özelliği de Chars özelliğidir.
Bu özellik, C# dilindeki String sınıfında indeksleyici olarak
temsil edilir. Bunun anlamı, C# dili içerisinde Chars adında bir
özellik yoktur fakat dizilerde indislerle dizi elemanlarına
ulaşmaya yarayan indeksleyiciler gibi string ifadeyi oluşturan
karakterlere ulaşmaya yarayan bir indeksleyici vardır. Bu
indeksleyici .net framework içerisinde tanımlı olan Chars
özelliğine karşılık gelir.

Örneğin bir string
ifade yazalım:

string str = "Csharp
Öğreniyorum";

String türündeki str
değişkenimizin karakterlerine teker teker indeksleyicilerle
ulaşalım.

ch = str[0];

ch değişkenini ekrana
yazdırdığımızda ilk harf olan ‘C’ karakterini göreceğiz. Yine
aynı şekilde:

ch = str[18];

Şimdi ise ch
değişkenimiz ‘m’ harfini içermektedir. Örneğimize göre 0 dan
küçük ve 18 den büyük değerler çalışma zamanında hata
verecektir. Şu şekilde indeksleyici için yapılan atama işlemi
hatalı olacaktır.

str[0] = 'H'; //
Derleme hatası..

String veri türü için
olan indeksleyici sadece okunabilirdir, string ifadenin bir
karakterini değiştirmek için onu kullanamazsınız. C# dilinde
string değişkenler aslında değiştrilemez durumdadırlar
denilebilir. Çünkü bir takım yöntemler yardımıyla sizin
yaptığınız değişikliklerle birlikte yeni bir string ifade oluşur
ve sizin değişkeninize atanır.

Bir string literal
için de değişkene atamaksızın indeksleyici kullanabilirsiniz.

Char ch =
“Csharpturk” [2];

Karakterler arasında
döngü yapmak isterseniz şu tür bir ifade kullanabilirsiniz:

(char) ((int) 'A' +
i)

Önce A harfinin
Unicode değeri olan 65 ifadesi casting yapılarak tamsayıya
dönüştü, sonra üzerine i ilave edildi, daha sonra da çıkan ifade
karaktere casting yapılarak dönüştürüldü.

String ifadelerden
bir dizi de oluşturabilirsiniz. Aşağıdaki örneği inceleyiniz.

string[] astr = {
"Golf", "Audi", "Mercedes" };

astr[1] ifadesi bize
“Audi” soncunu verecektir. Ayrıca string indeksleme ile astr[1][2]
ifadesi ile ikici elemanın üçüncü harfi olan ‘d’ ye
ulaşabiliriz. Burada indeksleme ile Length özelliğinin
kullanımını karıştırmamalıyız. astr.Length() ifadesi 3 sonucunu
verecektir. astr[1].Length ifadesi de 4 sonucunu vercektir çünkü
“Audi” kelimesi uzunluğu dört karakterdir.

Bir int ifadeyi
parametresiz yapıcı ile tanımlayabilirsiniz.

int i = new int();

Yukarıdaki ifade
parametresiz bir yapıcı olduğu için hatasızdır. Ama aşağıda
gördüğünüz string yapıcısı hatalıdır.

string str = new
string(); // çalışmayacaktır.

Bunun sebebi, String
sınıfı parametresiz yapıcıyı desteklememektedir. Değişken alan
birkaç yapı var ve bu yapılar sayesinde karakterlerden string
değişkenler oluşturabilirsiniz.

String bir değişkenin
karakterler dizisine dönüştürülmesini inceleyelim. Karakterler
dizisini string’ e dönüştürmek için kullanacağımız string yapıcı
ifadesi aşağıdaki şekilde olacaktır.

char[] ach = { 'm',
'e', 'r', 'h', 'a', 'b', 'a' };
string str = new string(ach);

String sınıfı
içerisinde, string değişkeni karakterler dizisi haline getiren
bir yöntem yer almaktadır.

char[] ach2 = str.ToCharArray();

String türü bir
değişken kullanmadan da bir yazıyı karakter dizisine
dönüştürebiliriz.

char[] ach =
"merhaba".ToCharArray();

Diyelim ki 21 tane
‘@’ sembolünden oluşan bir string değişken tanımlayacaksınız.
Dikkatli bir sayım ile aşağıdaki gibi yapmanız gerekiyor.

string str =
"@@@@@@@@@@@@@@@@@@@@@";

Aşağıdaki yöntem ise
çok daha kolaydır.

string str = new
string('@', 21);

Yapıcıların diğer bir
avantajı da ikinci parametrenin değişken olarak
tanımlanabilmesidir. Aşağıdaki örnek programı inceleyelim:

//
------------------------------------------------------
// PCWorld.cs PCWorld dergisi içerik sayfası örneği.
// ------------------------------------------------------
using
System;

class
Icindekiler
{
    static
string[]
bolumler = { "Teknoloji",

                "Donanım",
"Yazılım",
                "İnternet",
"Oyunlar"
};
    static
int[]
sayfaNo = { 3, 10, 16, 24, 29 };

    static
void
Main()
    {
        Sat\u305 ?r(0);
        Sat\u305 ?r(1);
        Sat\u305 ?r(2);
        Sat\u305 ?r(3);
        Sat\u305 ?r(4);
    }
    static
void
Sat\u305 ?r(int
i)
    {
        const
int
genislik = 60;
        string
noktalar = new
string('.',
            genislik - (i + 1).ToString().Length
                   - bolumler[i].Length
                   - sayfaNo[i].ToString().Length);

        Console.WriteLine("{0}.
{1}{2}{3}",
            i + 1, bolumler[i], noktalar, sayfaNo[i]);
    }
}

Programı
çalıştırdığınızda içerik bilgileri ekranda üç kolon halinde
görüntülenecektir. 5 bölümün adları, 5 bölümün sayfa numaraları
ve ihtiyaç miktarınca noktalar. Buradaki nokta sayısının nasıl
belirlendiğine dikkat etmeliyiz. İlk parametre periyot
karakteridir. İkinci parametreyi ise gerekli toplam genişlik ile
bölüm numaralarının karakter sayısının farkı ile elde ediyoruz.
Ekran çıktısı aşağıdadır.
Satır metodu, ekrana
yazılacak verilerin formatlanmasını ve yazdırılmasını sağlıyor.
Sıfır tabanlı parametre ise bölüm numarası iki dizinin indeksini
belirtmekte. Main yöntemi ile Satır metoduna gönderilen indeks
ile yazdırma işlemi gerçekleştiriliyor.

Karakter ve string
ifadeler insanların haberleşmesinin bir parçası gibidir. Char
yapısı ve String sınıfı birçok metoda sahiptir, bunların içinden
önemli diyebileceğimiz bazı yöntemleri inceleyelim.

Char yapısı
içerisinde bazı static yöntemler Boolean türünde değer
döndürerek karakterin kategorisine ulaşmamızı sağlar, Meselâ:

Char.IsDigit(ch)

Eğer dönen değer true
ise ‘ch‘ değişkeni ‘0’ dan ‘9’ a kadar bir değerdir. Ayrıca
belirli bir karakterin kategorisini de tespit edebiliriz:

Char.IsDigit(str, i)

Eğer dönen değer true
ise string str[i] karakteri ‘0’ dan ‘9’ a kadar bir değerdir.
IsDigit metodunun dışında IsLetter, IsLetterOrDigit, IsLower
(küçük harf için), IsUpper, IsNumber , IsPunctuation,
IsWhiteSpace gibi benzer metodlar da bulunmaktadır.

String değişkenini
değiştiremezsiniz ancak yeni bir string oluşturup eskisini
yerine koyarsınız. Bunun için String sınıfı içersinde birkaç
yöntem yer almaktadır.

Meselâ string
değişkeninizin tüm harflerini küçük karakterlerden oluşmasını
istiyorsanız aşağıdaki yöntemi kullanabilirsiniz.

string str2 = str.ToLower();

ToLower yöntemi, var
olan eski string ifadenin harflerini küçük karakterlere çevirir
ve str2 içerisine atadığımız yeni bir string döndürür. Ayrıca
orijinal değişkenin üstüne de yazdırabilirsiniz:

str = str.ToLower();

Bu kullanım da
çalışacaktır. Orijinal string yerine yeni oluşturulan değer
yazıldı.

Substring metodu da
String sınıfının önemli yöntemlerindendir. Bu yöntem ile bir
string’in belirli bir parçasını elde edebiliriz.

string str2 = str.SubString(BaşlangıçIndeksi,
KarakterSayısı);

Meselâ str içerisinde
“csharpturk” ifadesi olsun:

str.SubString(6, 4)

elde edilen string
parçası “turk” ifadesidir.

Ayrıca string içeris,nde
büyük küçük harf duyarlı aramalar yapabilirsiniz. AnyIndexOf
metodu ile string içerisinde karakter kümesi arayabilirsiniz.
Bunun yanında LastIndexOf ve LastIndexOfAny metodları ile de son
karaktere ulaşabilirsiniz.

String sınıfının
içerisinde iki farklı string’i karşılaştırmanızı sağlayan
yöntemler bulunuyor. Bunlardan bazıları durağan diğerleri de
türemiş yöntemlerdir. Bazıları bool türünde değer döndürürken
bazıları int türünde değer döndürebilir. Bu yöntemleri aşağıdaki
tabloda inceleyebilirsiniz.

Yöntem

Durağan / Türemiş

Dönen Değer

Karşılaştırma
Türü

Equals

Her ikisi de

bool

Nümerik (Karakter
Duyarlı)

Compare

Durağan

int

Metinsel
(Seçimlik, Karakter Duyarsız)

CompareTo

Türemiş

int

Metinsel
(Karakter Duyarsız)

CompareOrdinal

Durağan

int

Nümerik

Geri dönüş değer tipi
int olan yöntemler string ifadeleri sıralamada çok faydalı
olacaktır. Meselâ, aşağıdaki ifade basit bir karşılaştırma işini
yapıyor.

i = String.Compare(str1,
str2);

int tipindeki dönüş
değeri:

  • str1 < str2 ise
    negatif

  • str1 = str2 ise
    sıfır

  • str1 > str2 ise
    pozitif değer alır.

Nasıl oluyor da iki
string karşılaştırıldığında biri diğerinden büyük yada küçük
olabiliyor ? Nümerik karşılaştırma nümerik karakter kodlarının
sırasına bağlıdır. Bir örnek ile nümerik sıralamanın nasıl
yapıldığını inceleyelim:

D < E < F < d < e < f
< È < É < Ê < Ë < è < é < ê < ë

Eğer string’leri
alfabetik olarak sıralamak istiyorsanız bu örnek işinize
yaramayacak. Bunun için şu karşılaştırma kullanılmalıdır:

d < D < e < E < é < É
< è < È < ê < Ê < ë < Ë < f < F

Dikkat ettiyseniz
büyük küçük harf duyarlı olarak sıralama yapılıyor. Örneğin
“Yeni Araba” string ifadesi “yeni Araba” dan küçüktür.Eğer iki
string’in karakter sayısı eşit ise küçük harfle başlayan string
diğerinden küçüktür.Örneğin “the” string’i “The” string
ifadesinden küçüktür. Buna karşın “Them” ifadesi “then.”
ifadesinden küçüktür.

Karşılaştırma işlemi
için büyük küçük harf duyarlılığını eklemeyebilirsiniz:

i = String.Compare(str1,
str2, true);

Buradaki üçüncü değer
duyarlılık özelliğini aktif hale getirmektedir.

String sınıfı
içerisindeki bir diğer yöntem ise String.Format yöntemidir.
Bildiğiniz gibi bu yöntem ile string ifadelerin istenilen
biçimde yazdırılmasını sağlayabiliriz. İlk değer değişken için
yer tutucu özelliğini yapılandırmamızı sağlar. Console.Writeline
biçimlendirme yapısı ile benzerdir.

str = String.Format("{0}
+ {1} = {2}", A, B, A + B);

Yeni yorum gönder

Bu alanın içeriği gizli tutulacak ve açıkta gösterilmeyecektir.
  • Web sayfası ve e-posta adresleri otomatik olarak bağlantıya çevrilir.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Satır ve paragraflar otomatik olarak bölünürler.

Biçimleme seçenekleri hakkında daha fazla bilgi

CAPTCHA
Aşağıdaki resimde yer alan karakterleri kutucuğa doğru olarak yazınız
Image CAPTCHA
Enter the characters shown in the image.

Anket

Web sitesinde hangisi daha önemlidir: