Dizeler (C# Programlama Kılavuzu)

Dize, değeri metin olan String türünde bir nesnedir. Dahili olarak, metin sıralı salt okunur nesne koleksiyonu olarak Char depolanır. C# dizesinin sonunda null sonlandırma karakteri yoktur; bu nedenle, bir C# dizesi herhangi bir sayıda gömülü null karakter ('\0' ) içerebilir. Bir Length dizenin özelliği, Unicode karakter Char sayısını değil içerdiği nesne sayısını temsil eder. Bir dizede tek tek Unicode kod noktalarına erişmek için nesnesini StringInfo kullanın.

string ve System.String karşılaştırması

C# içinde anahtar string sözcüğü, için bir diğer addır. String Bu String nedenle, ve eşdeğerdir, ne olursa olsun, sağlanan diğer string adı kullanılması önerilir çünkü olmadan bile string using System; çalışır. sınıfı String dizeleri güvenli bir şekilde oluşturmak, manipüle etmeye ve karşılaştırmak için birçok yöntem sağlar. Ayrıca, C# dili yaygın dize işlemlerini basitleştirmek için bazı işleçleri aşırı yüklüdür. anahtar sözcüğü hakkında daha fazla bilgi için dizesine bakın. Türü ve yöntemleri hakkında daha fazla bilgi için bkz. String .

Dizeleri Bildirim ve Başlatma

Dizeleri aşağıdaki örnekte gösterildiği gibi çeşitli yollarla bildirebilir ve başlatabilirsiniz:

// Declare without initializing.
string message1;

// Initialize to null.
string message2 = null;

// Initialize as an empty string.
// Use the Empty constant instead of the literal "".
string message3 = System.String.Empty;

// Initialize with a regular string literal.
string oldPath = "c:\\Program Files\\Microsoft Visual Studio 8.0";

// Initialize with a verbatim string literal.
string newPath = @"c:\Program Files\Microsoft Visual Studio 9.0";

// Use System.String if you prefer.
System.String greeting = "Hello World!";

// In local variables (i.e. within a method body)
// you can use implicit typing.
var temp = "I'm still a strongly-typed System.String!";

// Use a const string to prevent 'message4' from
// being used to store another string value.
const string message4 = "You can't get rid of me!";

// Use the String constructor only when creating
// a string from a char*, char[], or sbyte*. See
// System.String documentation for details.
char[] letters = { 'A', 'B', 'C' };
string alphabet = new string(letters);

Dizeyi bir karakter dizisiyle başlatma dışında bir dize nesnesi oluşturmak için yeni işleci kullanmayabilirsiniz.

Dizesi sıfır uzunlukta olan Empty yeni bir nesne oluşturmak için sabit String değere sahip bir dizeyi başlatma. Sıfır uzunluklu bir dizenin dize değişmez değeri "" şeklindedir. Dizeleri null yerine Empty değeriyle başlatarak, bir ortaya çıkma ihtimalini NullReferenceException azaltarak. Bir IsNullOrEmpty(String) dizeye erişmeye çalışmadan önce dizenin değerini doğrulamak için statik yöntemini kullanın.

Dize Nesnelerinin Değişmezliği

Dize nesneleri sabittir: oluşturulduktan sonra değiştirilemezler. Bir dizeyi değiştirmek için görünen tüm yöntemler ve String C# işleçleri aslında sonuçları yeni bir dize nesnesine döndürür. Aşağıdaki örnekte, ve içeriği tek bir dize oluşturmak için birleştiklerinden, s1 s2 iki özgün dize değiştirilmez. +=işleci, birleştirilmiş içerikleri içeren yeni bir dize oluşturur. Bu yeni nesne değişkenine atanır ve atandığı özgün nesne, başka hiçbir değişken tarafından başvurulmadığı için çöp toplama s1 s1 için serbest bırakıldı.

string s1 = "A string is more ";
string s2 = "than the sum of its chars.";

// Concatenate s1 and s2. This actually creates a new
// string object and stores it in s1, releasing the
// reference to the original object.
s1 += s2;

System.Console.WriteLine(s1);
// Output: A string is more than the sum of its chars.

Dize "değişikliği" aslında yeni bir dize oluşturma işlemi olduğundan, dizelere başvurular oluşturma sırasında dikkatli olmalısınız. Bir dizeye başvuru oluşturur ve özgün dizeyi "değiştirir"sanız, başvuru, dize değiştirildiğinde oluşturulan yeni nesne yerine özgün nesneyi işaret eder. Aşağıdaki kod bu davranışı göstermektedir:

string s1 = "Hello ";
string s2 = s1;
s1 += "World";

System.Console.WriteLine(s2);
//Output: Hello

Özgün dizede arama ve değiştirme işlemleri gibi değişiklikleri temel alan yeni dizeler oluşturma hakkında daha fazla bilgi için bkz. Dize içeriklerini değiştirme.

Normal ve Ayrıntılı Dize Değişmez Değeri

Aşağıdaki örnekte gösterildiği gibi C# tarafından sağlanan kaçış karakterlerini eklemeniz gereken normal dize değişmez dizelerini kullanın:

string columns = "Column 1\tColumn 2\tColumn 3";
//Output: Column 1        Column 2        Column 3

string rows = "Row 1\r\nRow 2\r\nRow 3";
/* Output:
  Row 1
  Row 2
  Row 3
*/

string title = "\"The \u00C6olean Harp\", by Samuel Taylor Coleridge";
//Output: "The Æolean Harp", by Samuel Taylor Coleridge

Dize metni, örneğin dosya yollarında ters eğik çizgi karakterleri içerdiğinde kolaylık ve daha iyi okunabilirlik için ayrıntılı dizeler kullanın. Dize dizeleri, dize metninin bir parçası olarak yeni satır karakterlerini koruyarak çok satırlı dizeleri başlatmak için kullanılabilir. Tırnak işareti eklemek için çift tırnak işareti kullanın. Aşağıdaki örnek, metin dizeleri için bazı yaygın kullanımları gösterir:

string filePath = @"C:\Users\scoleridge\Documents\";
//Output: C:\Users\scoleridge\Documents\

string text = @"My pensive SARA ! thy soft cheek reclined
    Thus on mine arm, most soothing sweet it is
    To sit beside our Cot,...";
/* Output:
My pensive SARA ! thy soft cheek reclined
   Thus on mine arm, most soothing sweet it is
   To sit beside our Cot,...
*/

string quote = @"Her name was ""Sara.""";
//Output: Her name was "Sara."

Dize Kaçış Dizileri

Kaçış dizisi Karakter adı Unicode kodlama
\' Tek tırnak 0x0027
\" Çift tırnak 0x0022
\\ Ters eğik çizgi 0x005C
\0 Null 0x0000
\a Uyarı 0x0007
\b Geri Al tuşu 0x0008
\f Form akışı 0x000C
\n Yeni satır 0x000A
\r Satır başı 0x000D
\t Yatay sekme 0x0009
\v Dikey sekme 0x000B
\u Unicode kaçış dizisi (UTF-16) \uHHHH (aralık: 0000 - FFFF; örnek: \u00E7 = "ç")
\U Unicode kaçış dizisi (UTF-32) \U00HHHHHH (aralık: 000000 - 10FFFF; örnek: \U0001F47D = "👽")
\x Değişken uzunluğu dışında "\u" benzeri Unicode kaçış dizisi \xH[H][H][H] (aralık: 0 - FFFF; örnek: \x00E7 veya \x0E7 veya = \xE7 "ç")

Uyarı

Kaçış dizisini kullanırken ve 4'den az basamak belirtirken, kaçış dizisini hemen takip edecek karakterlerin geçerli hex basamakları \x (0-9, A-F ve a-f) olması, kaçış dizisinin parçası olarak yorumlanır. Örneğin, \xA1 U+00A1 kod noktası olan "¡" üretir. Ancak, sonraki karakter "A" veya "a" ise, kaçış dizisi bunun yerine varlık olarak yorumlanır ve \xA1A U+0A1A kod noktası olan "ਚ" üretir. Böyle durumlarda, 4 hex basama nın (örn. ) belirterek olası yanlış \x00A1 yorumlamalar önlenebilir.

Not

Derleme zamanında, ayrıntılı dizeler aynı kaçış dizileriyle sıradan dizelere dönüştürülür. Bu nedenle, hata ayıklayıcı izleme penceresinde bir tam dize görüntülersiniz, kaynak kodunuzdan tam sürüm değil, derleyici tarafından eklenen kaçış karakterlerini görebilirsiniz. Örneğin, açıklama dizesi izleme @"C:\files.txt" penceresinde "C: \\files.txt" olarak görünür.

Biçim Dizeleri

Biçim dizesi, içeriği çalışma zamanında dinamik olarak belirlenen bir dizedir. Biçim dizeleri, bir dize içindeki ayraçların içine irdelenmiş ifadeler veya yer tutucular katıştırarak oluşturulur. Küme ayraçları ( ) içindeki her şey, çalışma {...} zamanında biçimlendirilmiş dize olarak bir değere ve çıkışa çözümlenir. Biçim dizeleri oluşturmak için iki yöntem vardır: dize ilişkilendirme ve bileşik biçimlendirme.

Dize İlişkisi

C# 6.0 ve sonrası için kullanılabilir, irdelenmiş dizeler özel karakterle tanımlanır ve küme ayraçları içinde i $ ilişkilendirmeli ifadeler içerir. Dize ilişkilendirmeye yeni yeniysiniz, hızlı bir genel bakış için Dize ilişkilendirme - C# etkileşimli öğreticisi'ne bakın.

Kodunuzun okunabilirliğini ve sürdürülebilirliğini geliştirmek için dize ilişkilendirmesini kullanın. Dize ilişkilendirme yöntemiyle aynı sonuçları elde String.Format etmekle birlikte kullanım kolaylığını ve satır içi netliği artırır.

var jh = (firstName: "Jupiter", lastName: "Hammon", born: 1711, published: 1761);
Console.WriteLine($"{jh.firstName} {jh.lastName} was an African American poet born in {jh.born}.");
Console.WriteLine($"He was first published in {jh.published} at the age of {jh.published - jh.born}.");
Console.WriteLine($"He'd be over {Math.Round((2018d - jh.born) / 100d) * 100d} years old today.");

// Output:
// Jupiter Hammon was an African American poet born in 1711.
// He was first published in 1761 at the age of 50.
// He'd be over 300 years old today.

C# 10'dan itibaren, yer tutucular için kullanılan tüm ifadeler sabit dizeler olduğunda sabit bir dize başlatmak için dize ilişkilendirmesini kullanabilirsiniz.

Bileşik Biçimlendirme

, String.Format bir biçim dizesi oluşturmak için küme ayraçları içinde yer tutucuları kullanır. Bu örnek, yukarıda kullanılan dize ilişkilendirme yöntemine benzer bir çıkışla sonuç verir.

var pw = (firstName: "Phillis", lastName: "Wheatley", born: 1753, published: 1773);
Console.WriteLine("{0} {1} was an African American poet born in {2}.", pw.firstName, pw.lastName, pw.born);
Console.WriteLine("She was first published in {0} at the age of {1}.", pw.published, pw.published - pw.born);
Console.WriteLine("She'd be over {0} years old today.", Math.Round((2018d - pw.born) / 100d) * 100d);

// Output:
// Phillis Wheatley was an African American poet born in 1753.
// She was first published in 1773 at the age of 20.
// She'd be over 300 years old today.

.NET türlerini biçimlendirme hakkında daha fazla bilgi için bkz. .NET'te Biçimlendirme Türleri.

Alt Dizeler

Alt dize, bir dizede yer alan herhangi bir karakter dizisidir. özgün Substring dizenin bir parçasından yeni bir dize oluşturmak için yöntemini kullanın. yöntemini kullanarak bir alt dizenin bir veya daha fazla oluşumunu IndexOf arayabilirsiniz. Belirtilen Replace bir alt dizenin tüm oluşumlarını yeni bir dizeyle değiştirmek için yöntemini kullanın. yöntemi Substring gibi, Replace aslında yeni bir dize döndürür ve özgün dizeyi değiştirmez. Daha fazla bilgi için bkz. Dizeleri arama ve Dize içeriklerini değiştirme.

string s3 = "Visual C# Express";
System.Console.WriteLine(s3.Substring(7, 2));
// Output: "C#"

System.Console.WriteLine(s3.Replace("C#", "Basic"));
// Output: "Visual Basic Express"

// Index values are zero-based
int index = s3.IndexOf("C");
// index = 7

Tek Tek Karakterlere Erişme

Aşağıdaki örnekte olduğu gibi tek tek karakterlere salt okunur erişim elde etmek için dizin değeriyle dizi notasyonu kullanabilirsiniz:

string s5 = "Printing backwards";

for (int i = 0; i < s5.Length; i++)
{
    System.Console.Write(s5[s5.Length - i - 1]);
}
// Output: "sdrawkcab gnitnirP"

Yöntemler bir dizedeki tek tek karakterleri değiştirmek için gereken işlevselliği sağlayamıyorsa, tek tek karakterleri "yerinde" değiştirmek için bir nesnesi kullanabilir ve ardından yöntemleri kullanarak sonuçları depolamak için yeni bir dize String StringBuilder StringBuilder oluşturabilirsiniz. Aşağıdaki örnekte, özgün dizeyi belirli bir şekilde değiştirmeniz ve ardından sonuçları daha sonra kullanmak üzere depolamalıysanız:

string question = "hOW DOES mICROSOFT wORD DEAL WITH THE cAPS lOCK KEY?";
System.Text.StringBuilder sb = new System.Text.StringBuilder(question);

for (int j = 0; j < sb.Length; j++)
{
    if (System.Char.IsLower(sb[j]) == true)
        sb[j] = System.Char.ToUpper(sb[j]);
    else if (System.Char.IsUpper(sb[j]) == true)
        sb[j] = System.Char.ToLower(sb[j]);
}
// Store the new string.
string corrected = sb.ToString();
System.Console.WriteLine(corrected);
// Output: How does Microsoft Word deal with the Caps Lock key?

Null Dizeler ve Boş Dizeler

Boş dize, sıfır karakter içeren System.String bir nesnenin örneğidir. Boş dizeler genellikle boş bir metin alanını temsil etmek için çeşitli programlama senaryolarında kullanılır. Geçerli nesneler olduğundan boş dizeler üzerinde yöntemleri System.String çağırabilirsiniz. Boş dizeler aşağıdaki gibi başlatılır:

string s = String.Empty;  

Buna karşılık, null dize bir nesnenin örneğine başvuramaz ve null dizede yöntem çağırma girişimi System.String bir neden NullReferenceException olur. Ancak, null dizeleri diğer dizelerle bir concatenation ve karşılaştırma işlemlerinde kullanabilirsiniz. Aşağıdaki örneklerde, null dizeye yapılan bir başvuru, özel durumların neden olduğu ve neden olmadığını göstermektedir:

static void Main()
{
    string str = "hello";
    string nullStr = null;
    string emptyStr = String.Empty;

    string tempStr = str + nullStr;
    // Output of the following line: hello
    Console.WriteLine(tempStr);

    bool b = (emptyStr == nullStr);
    // Output of the following line: False
    Console.WriteLine(b);

    // The following line creates a new empty string.
    string newStr = emptyStr + nullStr;

    // Null strings and empty strings behave differently. The following
    // two lines display 0.
    Console.WriteLine(emptyStr.Length);
    Console.WriteLine(newStr.Length);
    // The following line raises a NullReferenceException.
    //Console.WriteLine(nullStr.Length);

    // The null character can be displayed and counted, like other chars.
    string s1 = "\x0" + "abc";
    string s2 = "abc" + "\x0";
    // Output of the following line: * abc*
    Console.WriteLine("*" + s1 + "*");
    // Output of the following line: *abc *
    Console.WriteLine("*" + s2 + "*");
    // Output of the following line: 4
    Console.WriteLine(s2.Length);
}

Hızlı Dize Oluşturma için StringBuilder Kullanma

.NET'te dize işlemleri yüksek oranda iyileştirilmiştir ve çoğu durumda performansı önemli ölçüde etkilemez. Ancak, yüzlerce veya binlerce kez yürütülen sıkı döngüler gibi bazı senaryolarda dize işlemleri performansı etkileyebilir. sınıfı, StringBuilder programınız birçok dize işlemesi gerçekleştiriyorsa daha iyi performans sunan bir dize arabelleği oluşturur. Dize, yerleşik dize veri türünün desteklemey ettiği bir şey olan karakterleri StringBuilder tek tek yeniden atamaya da olanak sağlar. Örneğin bu kod, yeni bir dize oluşturmadan bir dizenin içeriğini değiştirir:

System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet");
sb[0] = 'C';
System.Console.WriteLine(sb.ToString());
System.Console.ReadLine();

//Outputs Cat: the ideal pet

Bu örnekte, StringBuilder bir sayısal tür kümesinden dize oluşturmak için bir nesnesi kullanılır:

using System;
using System.Text;

namespace CSRefStrings
{
    class TestStringBuilder
    {
        static void Main()
        {
            var sb = new StringBuilder();

            // Create a string composed of numbers 0 - 9
            for (int i = 0; i < 10; i++)
            {
                sb.Append(i.ToString());
            }
            Console.WriteLine(sb);  // displays 0123456789

            // Copy one character of the string (not possible with a System.String)
            sb[0] = sb[9];

            Console.WriteLine(sb);  // displays 9123456789
            Console.WriteLine();
        }
    }
}

Dizeler, Uzantı Yöntemleri ve LINQ

türü String uygulayan IEnumerable<T> için sınıfında tanımlanan uzantı yöntemlerini dizeler Enumerable üzerinde kullanabilirsiniz. Görsel dağınıklığı önlemek için bu yöntemler tür için IntelliSense'in dışında tutulsa da String kullanılabilir. LinQ sorgu ifadelerini dizelerde de kullanabilirsiniz. Daha fazla bilgi için bkz. LINQ ve Dizeler.

Konu Description
Dize içeriklerini değiştirme Dizeleri dönüştürme ve dizelerin içeriğini değiştirme tekniklerini göstermektedir.
Dizeleri karşılaştırma Dizelerin dizi ve kültüre özgü karşılaştırmalarını nasıl gerçekleştireceklerini gösterir.
Birden çok dizeyi bir kez daha ifade etmek için Birden çok dizeyi tek bir dizede birleştirmenin çeşitli yollarını gösteren.
String.Split kullanarak dizeleri ayrıştırma Dizeleri ayrıştırmak için yönteminin nasıl kullan String.Split birisi olduğunu gösteren kod örnekleri içerir.
Dizeleri arama Dizelerde belirli metin veya desenler için arama kullanmayı açıklar.
Bir dizenin sayısal bir değeri temsil edip etmediğini belirleme Bir dizenin geçerli bir sayısal değere sahip olup olmadığını görmek için güvenli bir şekilde nasıl ayrıştırıla bir dizeyi gösterir.
Dize ilişkilendirme Dizeleri biçimlendirmek için kullanışlı bir söz dizimi sağlayan dize ilişkilendirme özelliğini açıklar.
Temel Dize İşlemleri Temel dize işlemlerini gerçekleştirmek için System.String ve yöntemlerini kullanan konu System.Text.StringBuilder başlıklarına bağlantılar sağlar.
Dizeleri Ayrıştırma .NET temel türlerinin dize gösterimlerini karşılık gelen türlerin örneklerine dönüştürmeyi açıklar.
.NET'te Tarih ve Saat Dizelerini Ayrıştırma "01/24/2008" gibi bir dizenin bir nesneye nasıl dönüştürüleceklerini System.DateTime gösterir.
Dizeleri Karşılaştırma Dizeleri karşılaştırma hakkında bilgi içerir ve C# ve Visual Basic.
StringBuilder Sınıfını Kullanma sınıfını kullanarak dinamik dize nesnelerini oluşturma ve değiştirme hakkında bilgi StringBuilder verir.
LINQ ve Dizeler LINQ sorgularını kullanarak çeşitli dize işlemlerini gerçekleştirme hakkında bilgi sağlar.
C# Programlama Kılavuzu C# dilinde programlama yapılarını açıklayan konulara bağlantılar sağlar.