Porównywanie ciągów na platformie .NET

Platforma .NET udostępnia kilka metod porównywania wartości ciągów. W poniższej tabeli wymieniono i opisano metody porównywania wartości.

Nazwa metody Używanie
String.Compare Porównuje wartości dwóch ciągów. Zwraca wartość całkowitą.
String.CompareOrdinal Porównuje dwa ciągi bez względu na kulturę lokalną. Zwraca wartość całkowitą.
String.CompareTo Porównuje bieżący obiekt ciągu z innym ciągiem. Zwraca wartość całkowitą.
String.StartsWith Określa, czy ciąg zaczyna się od przekazanego ciągu. Zwraca wartość logiczną.
String.EndsWith Określa, czy ciąg kończy się przekazanym ciągiem. Zwraca wartość logiczną.
String.Contains Określa, czy znak lub ciąg występuje w innym ciągu. Zwraca wartość logiczną.
String.Equals Określa, czy dwa ciągi są takie same. Zwraca wartość logiczną.
String.IndexOf Zwraca położenie indeksu znaku lub ciągu, zaczynając od początku sprawdzanego ciągu. Zwraca wartość całkowitą.
String.LastIndexOf Zwraca położenie indeksu znaku lub ciągu, zaczynając od końca sprawdzanego ciągu. Zwraca wartość całkowitą.

Compare Metoda

Metoda statyczna String.Compare zapewnia dokładny sposób porównywania dwóch ciągów. Ta metoda jest świadoma kulturowo. Tej funkcji można użyć do porównania dwóch ciągów lub podciągów dwóch ciągów. Ponadto przeciążenia są zapewniane w odniesieniu do przypadków lub lekceważenia i wariancji kulturowej. W poniższej tabeli przedstawiono trzy wartości całkowite, które może zwrócić ta metoda.

Wartość zwracana Stan
Ujemna liczba całkowita Pierwszy ciąg poprzedza drugi ciąg w kolejności sortowania.

— lub —

Pierwszy ciąg to null.
0 Pierwszy ciąg i drugi ciąg są równe.

— lub —

Oba ciągi to null.
Dodatnia liczba całkowita

— lub —

1
Pierwszy ciąg jest zgodny z drugim ciągiem w kolejności sortowania.

— lub —

Drugi ciąg to null.

Ważne

Metoda jest przeznaczona String.Compare głównie do użycia podczas porządkowania lub sortowania ciągów. Nie należy używać String.Compare metody do testowania równości (czyli jawnego wyszukiwania wartości zwracanej 0 bez względu na to, czy jeden ciąg jest mniejszy niż lub większy niż drugi). Zamiast tego, aby określić, czy dwa ciągi są równe, użyj String.Equals(String, String, StringComparison) metody .

W poniższym przykładzie użyto String.Compare metody w celu określenia względnych wartości dwóch ciągów.

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?"))

W tym przykładzie zostanie wyświetlona -1 konsola programu .

Powyższy przykład jest domyślnie uwzględniany w kulturze. Aby przeprowadzić porównanie ciągów niewrażliwych na kulturę, użyj przeciążenia String.Compare metody, która umożliwia określenie kultury do użycia przez podanie parametru kultury . Przykład, który pokazuje, jak używać String.Compare metody do przeprowadzania porównania bez uwzględniania kultury, zobacz Porównanie ciągów bez uwzględniania kultury.

CompareOrdinal Metoda

Metoda String.CompareOrdinal porównuje dwa obiekty ciągów bez uwzględniania kultury lokalnej. Zwracane wartości tej metody są identyczne z wartościami zwracanymi przez metodę Compare w poprzedniej tabeli.

Ważne

Metoda jest przeznaczona String.CompareOrdinal głównie do użycia podczas porządkowania lub sortowania ciągów. Nie należy używać String.CompareOrdinal metody do testowania równości (czyli jawnego wyszukiwania wartości zwracanej 0 bez względu na to, czy jeden ciąg jest mniejszy niż lub większy niż drugi). Zamiast tego, aby określić, czy dwa ciągi są równe, użyj String.Equals(String, String, StringComparison) metody .

W poniższym przykładzie użyto CompareOrdinal metody do porównania wartości dwóch ciągów.

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!"))

W tym przykładzie zostanie wyświetlona -32 konsola programu .

CompareTo Metoda

Metoda String.CompareTo porównuje ciąg, który bieżący obiekt ciągu hermetyzuje do innego ciągu lub obiektu. Zwracane wartości tej metody są identyczne z wartościami zwracanymi przez metodę String.Compare w poprzedniej tabeli.

Ważne

Metoda jest przeznaczona String.CompareTo głównie do użycia podczas porządkowania lub sortowania ciągów. Nie należy używać String.CompareTo metody do testowania równości (czyli jawnego wyszukiwania wartości zwracanej 0 bez względu na to, czy jeden ciąg jest mniejszy niż lub większy niż drugi). Zamiast tego, aby określić, czy dwa ciągi są równe, użyj String.Equals(String, String, StringComparison) metody .

W poniższym przykładzie użyto String.CompareTo metody do porównania string1 obiektu z obiektem 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)

W tym przykładzie zostanie wyświetlona -1 konsola programu .

Wszystkie przeciążenia String.CompareTo metody domyślnie wykonują porównania wrażliwe na kulturę i wielkość liter. Nie podano przeciążeń tej metody, które umożliwiają przeprowadzanie porównania bez uwzględniania kultury. W celu zapewnienia przejrzystości kodu zalecamy użycie String.Compare metody , określając CultureInfo.CurrentCulture operacje wrażliwe na kulturę lub CultureInfo.InvariantCulture operacje niewrażliwe na kulturę. Aby zapoznać się z przykładami, które pokazują, jak używać String.Compare metody do przeprowadzania porównań uwzględniających kulturę i niewrażliwych na kulturę, zobacz Performing Culture-Insensitive String Comparisons (Wykonywanie porównań ciągów bez uwzględniania kultury).

Equals Metoda

String.Equals Metoda może łatwo określić, czy dwa ciągi są takie same. Ta metoda uwzględniająca wielkość liter zwraca true wartość logiczną lub .false Można go użyć z istniejącej klasy, jak pokazano w następnym przykładzie. W poniższym przykładzie użyto Equals metody w celu określenia, czy obiekt ciągu zawiera frazę "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"))

W tym przykładzie zostanie wyświetlona True konsola programu .

Ta metoda może być również używana jako metoda statyczna. Poniższy przykład porównuje dwa obiekty ciągów przy użyciu metody statycznej.

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

W tym przykładzie zostanie wyświetlona True konsola programu .

StartsWith i EndsWith metody

Za pomocą String.StartsWith metody można określić, czy obiekt ciągu zaczyna się od tych samych znaków, które obejmują inny ciąg. Ta metoda uwzględniająca wielkość liter zwraca true wartość, jeśli bieżący obiekt ciągu zaczyna się od przekazanego ciągu i false jeśli nie. W poniższym przykładzie użyto tej metody, aby określić, czy obiekt ciągu zaczyna się od "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"))

W tym przykładzie zostanie wyświetlona True konsola programu .

Metoda String.EndsWith porównuje przekazany ciąg z znakami istniejącymi na końcu bieżącego obiektu ciągu. Zwraca również wartość logiczną. Poniższy przykład sprawdza koniec ciągu przy użyciu 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"))

W tym przykładzie zostanie wyświetlona False konsola programu .

IndexOf i LastIndexOf metody

Za pomocą String.IndexOf metody można określić położenie pierwszego wystąpienia określonego znaku w ciągu. Ta metoda wrażliwa na wielkość liter rozpoczyna się od początku ciągu i zwraca pozycję przekazanego znaku przy użyciu indeksu zerowego. Jeśli nie można odnaleźć znaku, zwracana jest wartość –1.

W poniższym przykładzie użyto IndexOf metody , aby wyszukać pierwsze wystąpienie znaku "l" w ciągu.

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

W tym przykładzie zostanie wyświetlona 2 konsola programu .

Metoda jest podobna String.LastIndexOf do String.IndexOf metody, z tą różnicą, że zwraca pozycję ostatniego wystąpienia określonego znaku w ciągu. Uwzględniana jest wielkość liter i używa indeksu opartego na zerach.

W poniższym przykładzie użyto LastIndexOf metody , aby wyszukać ostatnie wystąpienie znaku "l" w ciągu.

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

W tym przykładzie zostanie wyświetlona 9 konsola programu .

Obie metody są przydatne w połączeniu String.Remove z metodą . Możesz użyć metod IndexOf lub LastIndexOf , aby pobrać położenie znaku, a następnie podać tę pozycję do Remove metody, aby usunąć znak lub wyraz rozpoczynający się od tego znaku.

Zobacz też