Aracılığıyla paylaş


Dizeleri (C# Programlama Kılavuzu)

Bir dize türünde bir nesne olan String değeri metindir.Metin sıralı salt okunur topluluğu dahili olarak saklanan Char nesneler.Herhangi bir C# dizesi sonunda null sonlandırma karakteri vardır; Bu nedenle herhangi bir sayıda katıştırılmış boş karakterler ('\0') bir C# dizesini içerebilir.Length Bir dize özelliğini temsil eden sayısı Char , içerir, Unicode karakter sayısını değil.Bir dizede tek tek Unicode kod noktaları erişmek için StringInfo nesne.

dize vs.System.String

C# ' ta string anahtar sözcük için bir diğer ad olduğundan String.Bu nedenle, String ve string eşdeğerdir ve tercih ettiğiniz hangi adlandırma kuralını kullanabilirsiniz.String Sınıfı, güvenle oluşturma, değiştirme ve dizeleri karşılaştırma için birçok yöntem sağlar.Buna ek olarak, C# dilinin ortak dize işlemlerini kolaylaştırmak için bazı işleçler overloads.Anahtar sözcük hakkında daha fazla bilgi için bkz: dize (C# Reference).Türü ve onun yöntemleri hakkında daha fazla bilgi için bkz: String.

Bildirmek ve dizeleri başlatılıyor

Bildirmek ve aşağıdaki örnekte gösterildiği gibi çeşitli yollarla dizeleri başlatılamıyor:

// 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);

Kullanmak istemediğiniz Not Yeni bir dizi karakter dizesiyle başlatma sırasında dışında bir string nesnesi oluşturmak için işleç.

Bir dizeyle başlatmak Empty yeni bir oluşturmak için sabit değeri String nesne, dize sıfır uzunluğunda olur.Dize hazır bilgi sıfır uzunluklu bir dize gösterimidir "".Dizelerle başlatılıyor tarafından Empty yerine değer null, olasılığını azaltabilirsiniz bir NullReferenceException gerçekleşen.Statik kullanmak IsNullOrEmpty(String) onu erişmeye çalışmadan önce bir dize değerini doğrulamak için yöntem.

String nesneleri immutability

String nesneleri sabit: Bunlar, oluşturulduktan sonra değiştirilemez.Tüm String yöntemleri ve bir dizeyi değiştirmek için görünen C# işleçleri gerçekte dönmek sonuçları yeni bir string nesnesi.Aşağıdaki örnekte, içeriğini s1 ve s2 birleşir tek bir dize oluşturacak şekilde iki özgün değişmemiş dizelerdir.+= İşleci, birleştirilmiş içeriği içeren yeni bir dize oluşturur.Bu yeni nesne değişkenine atanır s1ve için atanan orijinal nesnenin s1 çöp toplama işlemi için başka bir değişken bir referansı bulunduğundan serbest bırakılır.

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.

Aslında yeni bir dize oluşturma dizesi "değişiklik" olduğu için dizeleri başvuru oluşturduğunuzda, dikkatli olmanız gerekir.Bir string bir başvuru oluşturur ve sonra "özgün dize değiştirme", başvuru dizesi değiştirildiğinde, oluşturulan yeni nesne yerine orijinal nesneyi işaret edecek şekilde devam eder.Aşağıdaki kod bu davranış gösterilmektedir:

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

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

Arama gibi değişiklikler dayanır ve orijinal dize işlemleri yerine yeni dizeleri oluşturma hakkında daha fazla bilgi için bkz: Nasıl yapılır: (C# Programlama Kılavuzu) dize içeriği değiştirme.

Normal ve harfi harfine dize hazır bilgileri

Aşağıdaki örnekte gösterildiği gibi C# tarafından sağlanan çıkış karakterleri gömmeniz gerekir normal dize hazır bilgileri 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

Örneğin dosya yolları, ters eğik çizgi karakterleri dizesi metin içeriyorsa, harfi harfine dizeleri kolaylık ve daha iyi okunabilirlik için kullanın.Harfi harfine dizeleri dize metnin bir parçası yeni satır karakterlerini koruduğu çok satırlı dizeleri başlatmak için kullanılabilir.Tırnak işareti harfi harfine bir dize içine gömmek için çift tırnak işaretleri kullanın.Aşağıdaki örnekte, harfi harfine dizeleri bazı yaygın kullanımları gösterilmektedir:

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çış sıraları

Çıkış sırası

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

0X0008

\f

Form besleme

0x000C

\n

Yeni satır

0x000A

\r

Satır başı

0x000D

\t

Yatay sekme

0x0009

\U

Unicode kaçış dizisi için temsilci çiftleri.

\Unnnnnnnn

\u

Unicode kaçış dizisi

\u0041 = "a"

\v

Dikey sekme

0x000B

\x

Unicode kaçış dizisi dışında "\u" değişken uzunluğu ile benzer.

\x0041 = "a"

[!NOT]

Derleme zamanında harfi harfine dizeleri sıradan dizelerle aynı çıkış sıralarını dönüştürülür.Bu nedenle, harfi harfine dize hata ayıklayıcı Gözcü penceresinde görüntülediğinizde, kaynak kodunuzu değil harfi harfine sürümünden derleyici tarafından eklenen kaçış karakterlerini görürsünüz.Örneğin, harfi harfine dize "C:\files.txt" @ "C:\\files.txt" Gözcü penceresinde görüntülenir.

Biçim dizeleri

Biçim dizesi içerikleri çalışma zamanında dinamik olarak belirlenebilir bir dizedir.Statik kullanarak bir biçim dizesi oluşturmak Format yöntemi ve zamanında diğer değerlerle değiştirilecek kaşlı ayraçlar içinde yer tutucuları katıştırma.Aşağıdaki örnek, her döngü tekrarında sonucu çıktı için bir biçim dizesi kullanır:

class FormatString
{
    static void Main()
    {
        // Get user input.
        System.Console.WriteLine("Enter a number");
        string input = System.Console.ReadLine();

        // Convert the input string to an int.
        int j;
        System.Int32.TryParse(input, out j);

        // Write a different string each iteration.
        string s;
        for (int i = 0; i < 10; i++)
        {
            // A simple format string with no alignment formatting.
            s = System.String.Format("{0} times {1} = {2}", i, j, (i * j));
            System.Console.WriteLine(s);
        }

        //Keep the console window open in debug mode.
        System.Console.ReadKey();
    }
}

Bir aşırı yüklenmesini WriteLine yöntemi bir biçim dizesi parametresi olarak alır.Bu nedenle, hazır olmadan açık çağrı yöntemi için bir biçim dizesi yalnızca katıştırabilirsiniz.Ancak kullanırsanız, WriteLine Visual Studio'da hata ayıklama Çıktısı görüntülenecek yöntemi Çıkış açıkça çağırmak zorunda penceresinde, Format yöntemi çünkü WriteLine yalnızca biçim dizesini bir dize kabul eder.Biçim dizeleri hakkında daha fazla bilgi için bkz: Biçimlendirme türleri.

Alt dizeler

Bir alt dize bir dize içeren herhangi bir karakter dizisidir.Use Substring özgün dizenin bir bölümünden yeni bir dize oluşturmak için yöntem.Bir alt dize bir veya daha çok tekrarı için kullanarak arama IndexOf yöntemi.Use Replace yeni bir dize ile belirtilen dize tüm tekrarlamalarını değiştirmek için yöntem.Gibi Substring yöntemi, Replace aslında yeni bir dize döndürür ve özgün dizenin değiştirmez.Daha fazla bilgi için, bkz. Nasıl: arama dizeleri kullanarak String yöntemlerini (C# Programlama Kılavuzu) ve Nasıl yapılır: (C# Programlama Kılavuzu) dize içeriği 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 karakterleri erişme

Aşağıdaki örnekte olduğu gibi tek tek karakterleri salt okunur erişim almak için bir dizin deðeriyle dizi gösterim biçimini kullanabilirsiniz:

string s5 = "Printing backwards";

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

String Yöntemleri, bir dizedeki karakterleri tek tek değiştirmek için gerekli işlevselliği sağlamak değil kullanabileceğiniz bir StringBuilder "yerinde" tek tek karakterleri değiştirmek için object ve kullanarak sonuçları depolamak için yeni bir dize oluşturmak StringBuilder yöntemleri.Aşağıdaki örnekte, özgün dizenin belirli bir biçimde değiştirebilir ve ileride kullanmak için sonuçları depolamak varsayılmaktadır:

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?            

Boş dizeler ve boş dizeler

Örneği boş bir dize olan bir System.String sıfır karakter içeren nesne.Boş dizeler genellikle boş bir metin alanı göstermek için çeşitli programlama senaryolarda kullanılır.Geçerli oldukları için boş dizeleri yöntemlerini çağırabilir System.String nesneler.Boş dizeler gibi başlatılır:

string s = String.Empty;

Bunun aksine, boş bir dize örneğine başvurmuyor bir System.String nesnesi ve nedenleri üzerinde boş bir dize bir yöntemi çağırmak için herhangi bir girişim bir NullReferenceException.Ancak, diğer dizelerle boş dizeleri bitiştirme ve karşılaştırma işlemlerinin kullanabilirsiniz.Boş bir dize başvuru yapar ve bir özel durum neden olmaz, bazı durumlarda aşağıdaki örneklerde gösterilmektedir:

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);
}

StringBuilder hızlı dizesi oluşturmak için kullanma

İşlemlerinde dize.net oldukça iyi duruma getirilmiş ve çoğu durumda performansı önemli ölçüde etkilemez.Bununla birlikte, yüzlerce veya binlerce defa yürütme sıkı döngüler gibi bazı senaryolarda, dize işlemleri performansını etkileyebilir.StringBuilder Programınız birçok dize düzenlemeleriyle uyguluyorsa, daha iyi bir performans sunan bir dize arabelleğindeki sınıfı oluşturur.StringBuilder Dize de yerleşik dize veri türünü desteklemiyor, tek tek karakterleri şeylerin atamak sağlar.Bu kod dizesinin içeriği yeni bir dize oluşturmadan gibi 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, bir StringBuilder nesne bir dize kümesini sayısal türler oluşturmak için kullanılır:

class TestStringBuilder
{
    static void Main()
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();

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

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

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

Dizeler, uzantı yöntemleri ve LINQ

Çünkü String Implements yazın IEnumerable<T>, tanımlanmış uzantı yöntemlerini kullanabilirsiniz Enumerable class dizeler.Görsel dağınıklığı önlemek için bu yöntemleri için IntelliSense dan hariç tutulur String türü ancak kullanılabilir ancak yine de.Ayrıca LINQ sorgu ifadeleri dizeler.Daha fazla bilgi için bkz. LINQ ve dizeleri.

İlgili Konular

Konu

Description

Nasıl yapılır: (C# Programlama Kılavuzu) dize içeriği değiştirme

Dizelerin içeriklerini değiştirmek üzere verilmektedir bir kod örneği sağlar.

Nasıl yapılır: birden çok dize (C# Programlama Kılavuzu) art arda eklemek

Nasıl kullanılacağı gösterilmiştir + işleci ve Stringbuilder katılmak için sınıf dizeler birlikte derleme zamanında da çalışma zamanında.

Nasıl yapılır: Karşılaştır dizeleri (C# Programlama Kılavuzu)

Sıra karşılaştırmalarını dizeleri nasıl gösterir.

Nasıl yapılır: dizeler (C# Programlama Kılavuzu) bölme

Nasıl kullanılacağını gösteren bir kod örneği içeren String.Split dizeleri ayrıştırma yöntemi.

Nasıl: arama dizeleri kullanarak String yöntemlerini (C# Programlama Kılavuzu)

Belirli dizeleri aramak için nasıl kullanılacağını açıklar.

Nasıl: arama dizeleri normal ifadeler kullanarak (C# Programlama Kılavuzu)

Normal ifadeler dizeleri aramak için nasıl kullanılacağını açıklar.

Nasıl yapılır: bir dize sayısal bir değer (C# Programlama Kılavuzu) temsil edip etmediğini belirlemek

Güvenli bir şekilde geçerli bir sayısal değer olup olmadığını görmek için bir dize ayrıştırma gösterilmiştir.

Nasıl yapılır: bir DateTime (C# Programlama Kılavuzu) bir dize dönüştürme

"24/01/2008" Gibi bir dize dönüştürmek nasıl gösterir bir System.DateTime nesne.

Temel dize işlemleri

Kullanmak konulara bağlantılar sağlar System.String ve System.Text.StringBuilder temel dize işlemlerini gerçekleştirmek için yöntem.

Dizeleri ayrıştırma

Karakter veya boş alanlar bir dizeye nasıl ekleneceği açıklanır.

Dizeleri karşılaştırma

Dizeleri karşılaştırmak hakkında bilgi içerir ve C# ve Visual Basic örnekleri sağlar.

StringBuilder sýnýfý kullanarak

Nasıl oluşturulacağı ve dinamik string nesneleri kullanarak değiştirin açıklar StringBuilder sınıfı.

LINQ ve dizeleri

LINQ sorguları kullanarak çeşitli dize işlemleri gerçekleştirme hakkında bilgi sağlar.

C# Programlama Kılavuzu

C# programlama yapılarını açıklayan konulara bağlantılar sağlar.

Tanıtılan kitap bölüm

Değişkenler hakkında daha fazla bilgi , başına Visual C# 2010