Řetězce (Příručka programování 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 řetězec (C#-Reference).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 Jak: upravit obsah řetězce (Příručka programování 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í.
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 Jak: hledání řetězce řetězec pomocí metody (Příručka programování C#) a Jak: upravit obsah řetězce (Příručka programování 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 System.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é System.String objektů.Prázdné řetězce jsou inicializovány takto:
string s = String.Empty;
Naopak řetězec null není odkaz na instanci System.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<T>, 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 |
---|---|
Poskytuje příklad kódu, který ukazuje, jak změnit obsah řetězce. |
|
Znázorňuje použití + operátor a Stringbuilder třídy připojit řetězce společně při kompilaci a spuštění. |
|
Ukazuje, jak provádět řadové porovnání řetězců. |
|
Obsahuje příklad kódu, který ukazuje, jak použít String.Split metody pro analýzu řetězce. |
|
Jak: hledání řetězce řetězec pomocí metody (Příručka programování C#) |
Vysvětluje způsob použití určité metody vyhledávání řetězců. |
Jak: hledání řetězce pomocí regulárních výrazů (Příručka programování C#) |
Vysvětluje způsob použití regulárních výrazů pro vyhledávání řetězců. |
Jak: zjistit, zda řetězec představuje číselnou hodnotu (Příručka programování C#) |
Ukazuje, jak bezpečně analyzovat řetězec a zjistěte, zda má platnou číselnou hodnotu. |
Jak: převést řetězec na datum a čas (Příručka programování C#) |
Ukazuje, jak převést řetězec jako "24/01/2008" a System.DateTime objektu. |
Obsahuje odkazy na témata, které používají System.String a System.Text.StringBuilder k provedení operace s řetězci základní metody. |
|
Popisuje, jak vložit znaky nebo prázdné mezery do řetězce. |
|
Obsahuje informace o porovnání řetězců a obsahuje příklady v C# a Visual Basic. |
|
Popisuje, jak vytvořit a upravit pomocí dynamické řetězec objektů StringBuilder třídy. |
|
Obsahuje informace o způsobu provádění různých operací řetězec pomocí LINQ dotazy. |
|
Obsahuje odkazy na témata, která popisují programovací konstrukce jazyka C#. |