Porovnání řetězců v .NET
.NET poskytuje několik metod pro porovnání hodnot řetězců. Následující tabulka uvádí a popisuje metody porovnání hodnot.
Název metody | Používání |
---|---|
String.Compare | Porovná hodnoty dvou řetězců. Vrátí celočíselnou hodnotu. |
String.CompareOrdinal | Porovná dva řetězce bez ohledu na místní jazykovou verzi. Vrátí celočíselnou hodnotu. |
String.CompareTo | Porovná aktuální objekt řetězce s jiným řetězcem. Vrátí celočíselnou hodnotu. |
String.StartsWith | Určuje, zda řetězec začíná řetězcem předaným. Vrátí logickou hodnotu. |
String.EndsWith | Určuje, zda řetězec končí řetězcem předaným. Vrátí logickou hodnotu. |
String.Contains | Určuje, zda se znak nebo řetězec vyskytuje v jiném řetězci. Vrátí logickou hodnotu. |
String.Equals | Určuje, zda jsou dva řetězce stejné. Vrátí logickou hodnotu. |
String.IndexOf | Vrátí pozici indexu znaku nebo řetězce počínaje začátkem řetězce, který zkoumáte. Vrátí celočíselnou hodnotu. |
String.LastIndexOf | Vrátí pozici indexu znaku nebo řetězce počínaje koncem řetězce, který zkoumáte. Vrátí celočíselnou hodnotu. |
Compare
Metoda
Statická String.Compare metoda poskytuje důkladný způsob porovnání dvou řetězců. Tato metoda je kulturně vědoma. Pomocí této funkce můžete porovnat dva řetězce nebo podřetězce dvou řetězců. Kromě toho se za předpokladu, že přetížení považují nebo ignorují případ a kulturní odchylky. Následující tabulka uvádí tři celočíselné hodnoty, které tato metoda může vrátit.
Vrácená hodnota | Podmínka |
---|---|
Záporné celé číslo | První řetězec předchází druhému řetězci v pořadí řazení. nebo První řetězec je null . |
0 | První řetězec a druhý řetězec jsou stejné. nebo Oba řetězce jsou null . |
Kladné celé číslo nebo 0 |
První řetězec následuje za druhým řetězcem v pořadí řazení. nebo Druhý řetězec je null . |
Důležité
Metoda String.Compare je primárně určena k použití při řazení nebo řazení řetězců. Metodu String.Compare byste neměli používat k testování rovnosti (to znamená explicitně hledat návratovou hodnotu 0 bez ohledu na to, zda je jeden řetězec menší nebo větší než druhý). Místo toho k určení, zda jsou dva řetězce stejné, použijte metodu String.Equals(String, String, StringComparison) .
Následující příklad používá metodu String.Compare k určení relativních hodnot dvou řetězců.
String^ string1 = "Hello World!";
Console::WriteLine(String::Compare(string1, "Hello World?"));
string string1 = "Hello World!";
Console.WriteLine(String.Compare(string1, "Hello World?"));
Dim string1 As String = "Hello World!"
Console.WriteLine(String.Compare(string1, "Hello World?"))
Tento příklad se zobrazí -1
v konzole.
Předchozí příklad je ve výchozím nastavení citlivý na jazykovou verzi. Chcete-li provést porovnání řetězců bez rozlišení jazykové verze, použijte přetížení String.Compare metody, která umožňuje určit jazykovou verzi, která se má použít zadáním parametru jazykové verze . Příklad, který ukazuje, jak použít metodu String.Compare k provedení porovnání nerozlišující jazykovou verzi, viz porovnání řetězců nerozlišující jazykovou verzi.
CompareOrdinal
Metoda
Metoda String.CompareOrdinal porovnává dva řetězcové objekty bez ohledu na místní jazykovou verzi. Návratové hodnoty této metody jsou stejné jako hodnoty vrácené metodou Compare
v předchozí tabulce.
Důležité
Metoda String.CompareOrdinal je primárně určena k použití při řazení nebo řazení řetězců. Metodu String.CompareOrdinal byste neměli používat k testování rovnosti (to znamená explicitně hledat návratovou hodnotu 0 bez ohledu na to, zda je jeden řetězec menší nebo větší než druhý). Místo toho k určení, zda jsou dva řetězce stejné, použijte metodu String.Equals(String, String, StringComparison) .
Následující příklad používá metodu CompareOrdinal
k porovnání hodnot dvou řetězců.
String^ string1 = "Hello World!";
Console::WriteLine(String::CompareOrdinal(string1, "hello world!"));
string string1 = "Hello World!";
Console.WriteLine(String.CompareOrdinal(string1, "hello world!"));
Dim string1 As String = "Hello World!"
Console.WriteLine(String.CompareOrdinal(string1, "hello world!"))
Tento příklad se zobrazí -32
v konzole.
CompareTo
Metoda
Metoda String.CompareTo porovnává řetězec, který aktuální objekt řetězce zapouzdřuje s jiným řetězcem nebo objektem. Návratové hodnoty této metody jsou stejné jako hodnoty vrácené metodou String.Compare v předchozí tabulce.
Důležité
Metoda String.CompareTo je primárně určena k použití při řazení nebo řazení řetězců. Metodu String.CompareTo byste neměli používat k testování rovnosti (to znamená explicitně hledat návratovou hodnotu 0 bez ohledu na to, zda je jeden řetězec menší nebo větší než druhý). Místo toho k určení, zda jsou dva řetězce stejné, použijte metodu String.Equals(String, String, StringComparison) .
Následující příklad používá metodu String.CompareTostring1
k porovnání objektu s objektem string2
.
String^ string1 = "Hello World";
String^ string2 = "Hello World!";
int MyInt = string1->CompareTo(string2);
Console::WriteLine( MyInt );
string string1 = "Hello World";
string string2 = "Hello World!";
int MyInt = string1.CompareTo(string2);
Console.WriteLine( MyInt );
Dim string1 As String = "Hello World"
Dim string2 As String = "Hello World!"
Dim MyInt As Integer = string1.CompareTo(string2)
Console.WriteLine(MyInt)
Tento příklad se zobrazí -1
v konzole.
Všechna přetížení String.CompareTo metody ve výchozím nastavení provádějí porovnání citlivá na jazykové verze a malá a velká písmena. Nejsou poskytována žádná přetížení této metody, které umožňují provádět porovnání bez rozlišení jazykové verze. Pro srozumitelnost kódu doporučujeme místo toho použít metodu String.Compare
, která určuje CultureInfo.CurrentCulture operace citlivé na jazykovou verzi nebo CultureInfo.InvariantCulture pro operace nerozlišující jazykovou verzi. Příklady, které ukazují, jak použít metodu String.Compare
k provádění porovnání citlivých na jazykovou verzi i bez rozlišení jazykové verze, naleznete v tématu Provádění porovnání řetězců bez rozlišení jazykové verze.
Equals
Metoda
Metoda String.Equals může snadno určit, zda jsou dva řetězce stejné. Tato metoda citlivá na malá a velká písmena true
vrátí logickou false
hodnotu. Dá se použít z existující třídy, jak je znázorněno v dalším příkladu. Následující příklad používá metodu Equals
k určení, zda řetězcový objekt obsahuje frázi "Hello World".
String^ string1 = "Hello World";
Console::WriteLine(string1->Equals("Hello World"));
string string1 = "Hello World";
Console.WriteLine(string1.Equals("Hello World"));
Dim string1 As String = "Hello World"
Console.WriteLine(string1.Equals("Hello World"))
Tento příklad se zobrazí True
v konzole.
Tuto metodu lze použít také jako statickou metodu. Následující příklad porovnává dva řetězcové objekty pomocí statické metody.
String^ string1 = "Hello World";
String^ string2 = "Hello World";
Console::WriteLine(String::Equals(string1, string2));
string string1 = "Hello World";
string string2 = "Hello World";
Console.WriteLine(String.Equals(string1, string2));
Dim string1 As String = "Hello World"
Dim string2 As String = "Hello World"
Console.WriteLine(String.Equals(string1, string2))
Tento příklad se zobrazí True
v konzole.
StartsWith
a EndsWith
metody
Metodu String.StartsWith můžete použít k určení, zda objekt řetězce začíná stejnými znaky, které zahrnují jiný řetězec. Tato metoda citlivá na malá a velká písmena vrátí true
, pokud aktuální objekt řetězce začíná předaným řetězcem a false
pokud ne. Následující příklad používá tuto metodu k určení, zda řetězcový objekt začíná na "Hello".
String^ string1 = "Hello World";
Console::WriteLine(string1->StartsWith("Hello"));
string string1 = "Hello World";
Console.WriteLine(string1.StartsWith("Hello"));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.StartsWith("Hello"))
Tento příklad se zobrazí True
v konzole.
Metoda String.EndsWith porovnává předaný řetězec se znaky, které existují na konci aktuálního objektu řetězce. Vrátí také logickou hodnotu. Následující příklad zkontroluje konec řetězce pomocí EndsWith
metody.
String^ string1 = "Hello World";
Console::WriteLine(string1->EndsWith("Hello"));
string string1 = "Hello World";
Console.WriteLine(string1.EndsWith("Hello"));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.EndsWith("Hello"))
Tento příklad se zobrazí False
v konzole.
IndexOf
a LastIndexOf
metody
Pomocí této metody můžete String.IndexOf určit pozici prvního výskytu konkrétního znaku v řetězci. Tato metoda citlivá na malá a velká písmena začne počítat od začátku řetězce a vrátí pozici předaného znaku pomocí indexu založeného na nule. Pokud se znak nenajde, vrátí se hodnota -1.
Následující příklad používá metodu IndexOf
k vyhledání prvního výskytu znaku 'l
' v řetězci.
String^ string1 = "Hello World";
Console::WriteLine(string1->IndexOf('l'));
string string1 = "Hello World";
Console.WriteLine(string1.IndexOf('l'));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.IndexOf("l"))
Tento příklad se zobrazí 2
v konzole.
Metoda String.LastIndexOf je podobná metodě s tím rozdílem String.IndexOf
, že vrací pozici posledního výskytu konkrétního znaku v řetězci. Rozlišují se malá a velká písmena a používá index založený na nule.
Následující příklad používá metodu LastIndexOf
k vyhledání posledního výskytu znaku 'l
' v řetězci.
String^ string1 = "Hello World";
Console::WriteLine(string1->LastIndexOf('l'));
string string1 = "Hello World";
Console.WriteLine(string1.LastIndexOf('l'));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.LastIndexOf("l"))
Tento příklad se zobrazí 9
v konzole.
Obě metody jsou užitečné při použití ve spojení s metodou String.Remove . Umístění znaku můžete načíst pomocí IndexOf
metod nebo LastIndexOf
metod a pak tuto pozici Remove
zadat metodě, aby se odebral znak nebo slovo, které začíná tímto znakem.
Viz také
- Osvědčené postupy pro používání řetězců v .NET
- Základní operace s řetězci
- Provádění operací řetězců bez rozlišení jazykové verze
- Řazení tabulek váhy – používané rozhraním .NET Framework a .NET Core 1.0-3.1 ve Windows
- Výchozí tabulka elementů kolace Unicode – používá ji .NET 5 na všech platformách a .NET Core v Linuxu a macOS