Sdílet prostřednictvím


Řetězce (Průvodce programováním v C#)

Řetězec je objekt typu String jehož hodnotou je text.Vnitřně je text uložen jako sekvenční čtení kolekci Char objektů.Neexistuje žádný znak ukončení null na konci C# řetězec; proto C# řetězec může obsahovat libovolný počet vložené znaky null (\0).Length Vlastnost řetězec představuje počet Char objekty obsahuje, není počet znaků Unicode.Přístup jednotlivých bodů kódu Unicode v řetězci StringInfo objektu.

řetězec vs.System.String

V jazyce C# string klíčové slovo je alias String.Proto String a string jsou rovnocenné a můžete použít libovolné konvenci pojmenování dáváte přednost.String Třída poskytuje mnoho metod pro bezpečné vytváření, manipulaci a porovnávání řetězců.Kromě toho jazyk C# přetížení některé hospodářské subjekty zjednodušuje běžné operace s řetězci.Další informace o klíčovém string (Referenční dokumentace jazyka C#).Další informace o typu a jeho metody, viz String.

Deklarování a inicializace řetězce

Můžete deklarovat a inicializovat řetězce různé způsoby, jak ukazuje následující příklad:

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

Všimněte si, že nepoužíváte nové operátor vytvoření objektu řetězec s výjimkou při inicializaci pole znaků řetězce.

Inicializace řetězec s Empty konstantní hodnotu pro vytvoření nového String objektu, jehož řetězec nulové délky.Vyjádření řetězce literálu řetězce nulové délky je "".Jsou inicializovány řetězce s Empty namísto hodnoty null, můžete snížit pravděpodobnost NullReferenceException výskytu.Použít statické IsNullOrEmpty(String) metodu ověření hodnotu řetězce před pokusem o přístup.

Immutability řetězec objektů

Řetězec objekty jsou nezměnitelné: nemůže být změněn poté, co byly vytvořeny.Všechny String metody a C# operátory, které se zobrazují Upravit řetězec nového objektu řetězec skutečně vrátí výsledky.V následujícím příkladu při obsahu s1 a s2 jsou zřetězeny tvoří jeden řetězec původní dva řetězce nezměněna.+= Operátor vytvoří nový řetězec, který obsahuje kombinované obsah.Nový objekt je přiřazena proměnné s1a původní objekt, který byl přiřazen k s1 je vydána úklidu, protože žádné jiné proměnné obsahuje odkaz na.

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.

Protože řetězec "modifikace" je skutečně nové vytvoření řetězce, musí opatrnost při vytváření odkazů na řetězce.Pokud vytvoříte odkaz na řetězec a pak "změnit" původní řetězec, odkaz nadále přejděte na původní objekt namísto nový objekt, který byl vytvořen při řetězec byl změněn.Následující kód ukazuje toto chování:

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

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

Další informace o vytvoření nové řetězce, které jsou založeny na úpravy, například hledat a nahradit původní řetězec operací naleznete v Postupy: Změna obsahu řetězce (Průvodce programováním v C#).

Pravidelné a doslovné znění řetězcové literály

Používáte normální řetězcové literály znaků escape v C# musí embed, jak ukazuje následující příklad:

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

Použijte doslovné znění řetězce pro pohodlí a lepší čitelnost textu řetězec obsahuje zpětná lomítka, například v souboru cesty.Protože doslovné znění řetězce zachovat jako část řetězce textu znaky nového řádku, lze použít k inicializaci víceřádkové řetězce.Používejte dvojité uvozovky vložit uvozovky uvnitř řetězec doslovného zápisu.Následující příklad zobrazuje obvyklé využití doslovné znění řetězců:

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."

Sekvence Escape řetězec

Sekvence escape

Název znaku

Kódování Unicode

\'

Jednoduché uvozovky

0x0027

\"

Dvojité uvozovky

0x0022

\\

Zpětné lomítko

0x005C

\0

Null

0x0000

\a

Upozornit

0x0007

\b

BACKSPACE

0x0008

\f

Znak Form feed

0x000C

\n

Nový řádek

0x000A

\r

Návrat

0x000D

\t

Horizontální tabelátor

0x0009

\U

Escape sekvence Unicode pro páry náhradníka.

\Unnnnnnnn

\u

Escape sekvence Unicode

\u0041 = "A"

\v

Vertikální tabelátor

0x000B

\x

Escape sekvence Unicode podobné "\u" s výjimkou s proměnnou délkou.

\x0041 = "A"

[!POZNÁMKA]

V době kompilace doslovné znění řetězce převedeny na běžný řetězce s stejné sekvence escape.Proto pokud řetězec doslovného zápisu zobrazíte v okně kukátka debugger, uvidíte escape znaky, které byly přidány kompilátorem není doslovné znění verze ze zdrojového kódu.Například řetězec doslovného zápisu @ "C:\files.txt" se zobrazí v okně kukátka jako "C:\\files.txt".

Formát řetězce

Formát řetězce je řetězec, jehož obsah lze stanovit dynamicky za běhu.Vytvořit řetězec formátu pomocí statickému Format metoda a vložení zástupných symbolů ve složených závorkách, které budou nahrazeny další hodnoty za běhu.V následujícím příkladu je řetězec formátu výstupu výsledek každé opakování smyčky:

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

Jeden přetížení WriteLine metoda přebírá řetězec formátu jako parametr.Proto lze vložit pouze formát řetězcový literál bez explicitní volání metody.Však použijete WriteLine metoda zobrazení výstupu ladění aplikace Visual Studio Výstup okno, je nutné explicitně volat Format metoda protože WriteLine přijímá pouze řetězec není řetězec formátu.Další informace o formátu řetězce, viz Typy formátování v .NET Frameworku.

Podřetězce

Podřetězec je posloupnost znaků, obsažené v řetězci.Použití Substring metoda vytvořit nový řetězec z části původní řetězec.Můžete hledat další výskyty podřetězec pomocí IndexOf metoda.Použití Replace metoda nový řetězec nahradit všechny výskyty zadaný dílčí řetězec.Stejně jako Substring metody, Replace skutečně vrací nový řetězec a nemění původní řetězec.Další informace naleznete v tématu Postupy: Vyhledávání řetězců pomocí řetězcových metod (Průvodce programováním v C#) a Postupy: Změna obsahu řetězce (Průvodce programováním v C#).

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

Přístup jednotlivých znaků

Zápis pole s hodnotou indexu lze získat přístup pouze pro čtení pro jednotlivé znaky, jako v následujícím příkladu:

string s5 = "Printing backwards";

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

Pokud String metody neposkytují funkce, které je nutné upravit jednotlivé znaky v řetězci, můžete použít StringBuilder objekt upravovat jednotlivé znaky "místní" a potom vytvořit nový řetězec pro uložení výsledků pomocí StringBuilder metod.V následujícím příkladu předpokládejme, že musí změnit původní řetězec určitým způsobem a uložit pro budoucí použití:

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 řetězce a prázdné řetězce

Prázdný řetězec je instance String objekt obsahující nulové znaků.Prázdné řetězce představují prázdné textové pole se často používají v různých situacích programování.Můžete volat metody na prázdné řetězce, protože jsou platné String objektů.Prázdné řetězce jsou inicializovány takto:

string s = String.Empty;

Naopak řetězec null není odkaz na instanci String objektu a pokus o volání metody na nulový řetězec příčin NullReferenceException.Můžete však použít null operace porovnání a zřetězení řetězců s jinými řetězci.Následující příklady znázorňují některé případy, ve kterých nemá odkaz na řetězec null a nezpůsobuje být vyvolána výjimka:

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

Pomocí StringBuilder pro rychlé vytváření řetězce

Operace v řetězci.NET vysoce optimalizována a ve většině případů není ovlivnit významně výkon.V některých případech například těsné smyčky, které při vykonávání mnoha stovky nebo tisíce časy však řetězec operací může ovlivnit výkon.StringBuilder Třídy vytvoří řetězec vyrovnávací paměť, která nabízí lepší výkon, pokud program provádí mnoho řetězec manipulace.StringBuilder Řetězec také umožňuje přiřadit jednotlivé znaky něco předdefinovaný řetězec typu dat nepodporuje.Tento kód například změny obsahu řetězce bez vytvoření nového řetězec:

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

V tomto příkladu StringBuilder objektu lze vytvořit z sadu typů číselný řetězec:

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

Řetězce, rozšíření metody a LINQ

Protože String zadejte implementuje IEnumerable, lze použít rozšíření metody definované v Enumerable třídy na pole řetězců.Chcete-li předejít zbytečné soubory visual tyto metody jsou vyloučeny z technologie IntelliSense pro String typu, ale jsou přesto k dispozici.Můžete také použít LINQ výrazy v řetězci dotazu.Další informace naleznete v tématu LINQ a řetězce.

Příbuzná témata

Téma

Description

Postupy: Změna obsahu řetězce (Průvodce programováním v C#)

Poskytuje příklad kódu, který ukazuje, jak změnit obsah řetězce.

Postupy: Řetězení více řetězců (Průvodce programováním v C#)

Znázorňuje použití + operátor a Stringbuilder třídy připojit řetězce společně při kompilaci a spuštění.

Postupy: Porovnávání řetězců (Průvodce programováním v C#)

Ukazuje, jak provádět řadové porovnání řetězců.

Postupy: Dělení řetězců (Průvodce programováním v C#)

Obsahuje příklad kódu, který ukazuje, jak použít String.Split metody pro analýzu řetězce.

Postupy: Vyhledávání řetězců pomocí řetězcových metod (Průvodce programováním v C#)

Vysvětluje způsob použití určité metody vyhledávání řetězců.

Postupy: Vyhledávání řetězců pomocí regulárních výrazů (Průvodce programováním v C#)

Vysvětluje způsob použití regulárních výrazů pro vyhledávání řetězců.

Postupy: Určení, zda řetězec reprezentuje číselnou hodnotu (Průvodce programováním v C#)

Ukazuje, jak bezpečně analyzovat řetězec a zjistěte, zda má platnou číselnou hodnotu.

Postupy: Převedení řetězce na typ DateTime (Průvodce programováním v C#)

Ukazuje, jak převést řetězec jako "24/01/2008" a DateTime objektu.

Základní operace s řetězci v .NET Frameworku

Obsahuje odkazy na témata, které používají String a StringBuilder k provedení operace s řetězci základní metody.

Analýza řetězců v .NET Frameworku

Popisuje, jak vložit znaky nebo prázdné mezery do řetězce.

Porovnání řetězců v .NET Frameworku

Obsahuje informace o porovnání řetězců a obsahuje příklady v C# a Visual Basic.

Používání třídy StringBuilder v .NET Frameworku

Popisuje, jak vytvořit a upravit pomocí dynamické řetězec objektů StringBuilder třídy.

LINQ a řetězce

Obsahuje informace o způsobu provádění různých operací řetězec pomocí LINQ dotazy.

Průvodce programováním v C#

Obsahuje odkazy na témata, která popisují programovací konstrukce jazyka C#.

Kapitola hlavní knihy

Další informace o proměnných v začátek Visual C# 2010