String.Compare Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Compara dois objetos especificados String e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.
Sobrecargas
| Name | Description |
|---|---|
| Compare(String, String) |
Compara dois objetos especificados String e devolve um inteiro que indica a sua posição relativa na ordem de ordenação. |
| Compare(String, String, Boolean) |
Compara dois objetos especificados String , ignorando ou respeitando o seu caso, e devolve um inteiro que indica a sua posição relativa na ordem de ordenação. |
| Compare(String, String, StringComparison) |
Compara dois objetos especificados String usando as regras especificadas e devolve um inteiro que indica a sua posição relativa na ordem de ordenação. |
| Compare(String, String, Boolean, CultureInfo) |
Compara dois objetos especificados String , ignorando ou respeitando o seu caso, e usando informação específica da cultura para influenciar a comparação, e retorna um inteiro que indica a sua posição relativa na ordem de ordenação. |
| Compare(String, String, CultureInfo, CompareOptions) |
Compara dois objetos especificados String usando as opções de comparação especificadas e informação específica da cultura para influenciar a comparação, e retorna um inteiro que indica a relação das duas cadeias entre si na ordem de ordenação. |
| Compare(String, Int32, String, Int32, Int32) |
Compara subcadeias de dois objetos especificados String e devolve um inteiro que indica a sua posição relativa na ordem de ordenação. |
| Compare(String, Int32, String, Int32, Int32, Boolean) |
Compara subcadeias de dois objetos especificados String , ignorando ou respeitando o seu caso, e devolve um inteiro que indica a sua posição relativa na ordem de ordenação. |
| Compare(String, Int32, String, Int32, Int32, StringComparison) |
Compara substrings de dois objetos especificados String usando as regras especificadas e devolve um inteiro que indica a sua posição relativa na ordem de ordenação. |
| Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo) |
Compara substrings de dois objetos especificados String , ignorando ou respeitando o seu caso e usando informação específica da cultura para influenciar a comparação, e devolve um inteiro que indica a sua posição relativa na ordem de ordenação. |
| Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) |
Compara substrings de dois objetos especificados String usando as opções de comparação especificadas e informações específicas de cultura para influenciar a comparação, e retorna um inteiro que indica a relação das duas substrings entre si na ordem de ordenação. |
Observações
Todas as sobrecargas do Compare método retornam um inteiro com sinal de 32 bits indicando a relação lexical entre os dois comparandos.
| Value | Condition |
|---|---|
| Menor que zero | A primeira subcadeia precede a segunda subcadeia na ordem de ordenação. |
| Zero | As subcadeias ocorrem na mesma posição na ordem de ordenação, ou length é zero. |
| Maior que zero | A primeira subcadeia segue a segunda subcadeia na ordem de ordenação. |
Warning
Sempre que possível, deve invocar uma sobrecarga do Compare método que inclui um StringComparison parâmetro. Para obter mais informações, consulte Práticas recomendadas para o uso de cadeias de caracteres.
Compare(String, String)
Compara dois objetos especificados String e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.
public:
static int Compare(System::String ^ strA, System::String ^ strB);
public static int Compare(string strA, string strB);
static member Compare : string * string -> int
Public Shared Function Compare (strA As String, strB As String) As Integer
Parâmetros
- strA
- String
A primeira cadeia de caracteres a ser comparada.
- strB
- String
A segunda string para comparar.
Devoluções
Um inteiro com sinal de 32 bits que indica a relação lexical entre os dois comparandos.
| Valor | Condição |
|---|---|
| Menos que zero |
strA precede strB na ordem de ordenação.
|
| Zero |
strA ocorre na mesma posição que strB na ordem de ordenação.
|
| Maior que zero |
strA segue-se strB na ordem de ordenação.
|
Exemplos
O exemplo seguinte chama o Compare(String, String) método para comparar três conjuntos de cadeias.
// Create upper-case characters from their Unicode code units.
String stringUpper = "\x0041\x0042\x0043";
// Create lower-case characters from their Unicode code units.
String stringLower = "\x0061\x0062\x0063";
// Display the strings.
Console.WriteLine("Comparing '{0}' and '{1}':",
stringUpper, stringLower);
// Compare the uppercased strings; the result is true.
Console.WriteLine("The Strings are equal when capitalized? {0}",
String.Compare(stringUpper.ToUpper(), stringLower.ToUpper()) == 0
? "true" : "false");
// The previous method call is equivalent to this Compare method, which ignores case.
Console.WriteLine("The Strings are equal when case is ignored? {0}",
String.Compare(stringUpper, stringLower, true) == 0
? "true" : "false" );
// The example displays the following output:
// Comparing 'ABC' and 'abc':
// The Strings are equal when capitalized? true
// The Strings are equal when case is ignored? true
open System
// Create upper-case characters from their Unicode code units.
let stringUpper = "\x0041\x0042\x0043"
// Create lower-case characters from their Unicode code units.
let stringLower = "\x0061\x0062\x0063"
// Display the strings.
printfn $"Comparing '{stringUpper}' and '{stringLower}':"
// Compare the uppercased strings the result is true.
printfn $"The Strings are equal when capitalized? %b{String.Compare(stringUpper.ToUpper(), stringLower.ToUpper()) = 0}"
// The previous method call is equivalent to this Compare method, which ignores case.
printfn $"The Strings are equal when case is ignored? %b{String.Compare(stringUpper, stringLower, true) = 0}"
// The example displays the following output:
// Comparing 'ABC' and 'abc':
// The Strings are equal when capitalized? true
// The Strings are equal when case is ignored? true
Public Module Example
Public Sub Main()
' Create upper-case characters from their Unicode code units.
Dim stringUpper As String = ChrW(&H41) + ChrW(&H42) + ChrW(&H43)
' Create lower-case characters from their Unicode code units.
Dim stringLower As String = ChrW(&H61) + ChrW(&H62) + ChrW(&H63)
' Display the strings.
Console.WriteLine("Comparing '{0}' and '{1}':",
stringUpper, stringLower)
' Compare the uppercased strings; the result is true.
Console.WriteLine("The Strings are equal when capitalized? {0}",
If(String.Compare(stringUpper.ToUpper(), stringLower.ToUpper()) = 0,
"true", "false"))
' The previous method call is equivalent to this Compare method, which ignores case.
Console.WriteLine("The Strings are equal when case is ignored? {0}",
If(String.Compare(stringUpper, stringLower, true) = 0,
"true", "false"))
End Sub
End Module
' The example displays the following output:
' Comparing 'ABC' and 'abc':
' The Strings are equal when capitalized? true
' The Strings are equal when case is ignored? true
No exemplo seguinte, a ReverseStringComparer aula demonstra como se pode avaliar duas cadeias com o Compare método.
using System;
using System.Text;
using System.Collections;
public class SamplesArrayList
{
public static void Main()
{
// Creates and initializes a new ArrayList.
ArrayList myAL = new ArrayList();
myAL.Add("Eric");
myAL.Add("Mark");
myAL.Add("Lance");
myAL.Add("Rob");
myAL.Add("Kris");
myAL.Add("Brad");
myAL.Add("Kit");
myAL.Add("Bradley");
myAL.Add("Keith");
myAL.Add("Susan");
// Displays the properties and values of the ArrayList.
Console.WriteLine("Count: {0}", myAL.Count);
PrintValues("Unsorted", myAL);
myAL.Sort();
PrintValues("Sorted", myAL);
myAL.Sort(new ReverseStringComparer());
PrintValues("Reverse", myAL);
string[] names = (string[])myAL.ToArray(typeof(string));
}
public static void PrintValues(string title, IEnumerable myList)
{
Console.Write("{0,10}: ", title);
StringBuilder sb = new StringBuilder();
foreach (string s in myList)
{
sb.AppendFormat("{0}, ", s);
}
sb.Remove(sb.Length - 2, 2);
Console.WriteLine(sb);
}
}
public class ReverseStringComparer : IComparer
{
public int Compare(object? x, object? y)
{
string? s1 = x as string;
string? s2 = y as string;
//negate the return value to get the reverse order
return -String.Compare(s1, s2);
}
}
open System
open System.Text
open System.Collections.Generic
type ReverseStringComparer() =
interface IComparer<string> with
member _.Compare(x, y) =
-String.Compare(x, y)
let printValues title (myList: #seq<string>) =
printf $"{title,10}: "
let sb = StringBuilder()
for s in myList do
sb.Append $"{s}, " |> ignore
sb.Remove(sb.Length - 2, 2) |> ignore
printfn $"{sb}"
// Creates and initializes a new ResizeArray.
let myAL = ResizeArray()
myAL.Add "Eric"
myAL.Add "Mark"
myAL.Add "Lance"
myAL.Add "Rob"
myAL.Add "Kris"
myAL.Add "Brad"
myAL.Add "Kit"
myAL.Add "Bradley"
myAL.Add "Keith"
myAL.Add "Susan"
// Displays the properties and values of the ArrayList.
printfn $"Count: {myAL.Count}"
printValues "Unsorted" myAL
myAL.Sort()
printValues "Sorted" myAL
myAL.Sort(ReverseStringComparer())
printValues "Reverse" myAL
Imports System.Text
Imports System.Collections
Public Class SamplesArrayList
Public Shared Sub Main()
Dim myAL As New ArrayList()
' Creates and initializes a new ArrayList.
myAL.Add("Eric")
myAL.Add("Mark")
myAL.Add("Lance")
myAL.Add("Rob")
myAL.Add("Kris")
myAL.Add("Brad")
myAL.Add("Kit")
myAL.Add("Bradley")
myAL.Add("Keith")
myAL.Add("Susan")
' Displays the properties and values of the ArrayList.
Console.WriteLine("Count: {0}", myAL.Count)
PrintValues("Unsorted", myAL)
myAL.Sort()
PrintValues("Sorted", myAL)
Dim comp as New ReverseStringComparer
myAL.Sort(comp)
PrintValues("Reverse", myAL)
Dim names As String() = CType(myAL.ToArray(GetType(String)), String())
End Sub
Public Shared Sub PrintValues(title As String, myList As IEnumerable)
Console.Write("{0,10}: ", title)
Dim sb As New StringBuilder()
Dim s As String
For Each s In myList
sb.AppendFormat("{0}, ", s)
Next s
sb.Remove(sb.Length - 2, 2)
Console.WriteLine(sb)
End Sub
End Class
Public Class ReverseStringComparer
Implements IComparer
Function Compare(x As Object, y As Object) As Integer implements IComparer.Compare
Dim s1 As String = CStr (x)
Dim s2 As String = CStr (y)
'negate the return value to get the reverse order
Return - [String].Compare(s1, s2)
End Function 'Compare
End Class
Observações
A comparação utiliza a cultura atual para obter informações específicas da cultura, como regras de carcaça e a ordem alfabética dos caracteres individuais. Por exemplo, uma cultura pode especificar que certas combinações de caracteres sejam tratadas como um único carácter, ou que letras maiúsculas e minúsculas sejam comparadas de uma determinada forma, ou que a ordem de ordenação de um carácter depende dos caracteres que o precedem ou seguem.
A comparação é feita usando regras de ordenação de palavras. Para mais informações sobre ordenações de palavra, cadeia e ordinais, veja System.Globalization.CompareOptions.
Warning
Ao comparar cadeias, deve chamar o Compare(String, String, StringComparison) método, o que exige que especifique explicitamente o tipo de comparação de cadeias que o método utiliza. Para obter mais informações, consulte Práticas recomendadas para o uso de cadeias de caracteres.
Um ou ambos os comparandos podem ser null. Por definição, qualquer cadeia, incluindo a cadeia vazia (""), compara-se maior do que uma referência nula; e duas referências nulas comparam-se iguais entre si.
A comparação termina quando uma desigualdade é descoberta ou ambas as cadeias foram comparadas. No entanto, se as duas cadeias forem iguais ao fim de uma sequência, e a outra cadeia tiver caracteres restantes, então a cadeia com caracteres restantes é considerada maior. O valor de retorno é o resultado da última comparação realizada.
Resultados inesperados podem ocorrer quando as comparações são afetadas por regras de revestimento específicas da cultura. Por exemplo, em turco, o seguinte exemplo produz resultados errados porque o sistema de ficheiros em turco não utiliza regras linguísticas de maiúscula para a letra "i" em "file".
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, true) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
Return True
Else
Return False
End If
End Function
Compare o nome do caminho com "ficheiro" usando uma comparação ordinal. O código correto para isto é o seguinte:
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
Return True
Else
Return False
End If
End Function
Notas para Chamadores
Os conjuntos de caracteres incluem personagens ignoráveis. O Compare(String, String) método não considera tais caracteres quando realiza uma comparação sensível à cultura. Por exemplo, se o código seguinte for executado no .NET Framework 4 ou posterior, uma comparação sensível à cultura de "animal" com "ani-mal" (usando um hífen suave, ou U+00AD) indica que as duas cadeias são equivalentes.
string s1 = "ani\u00ADmal";
string s2 = "animal";
Console.WriteLine("Comparison of '{0}' and '{1}': {2}",
s1, s2, String.Compare(s1, s2));
// The example displays the following output:
// Comparison of 'ani-mal' and 'animal': 0
open System
let s1 = "ani\u00ADmal"
let s2 = "animal"
printfn $"Comparison of '{s1}' and '{s2}': {String.Compare(s1, s2)}"
// The example displays the following output:
// Comparison of 'ani-mal' and 'animal': 0
Module Example
Public Sub Main()
Dim s1 As String = "ani" + ChrW(&h00AD) + "mal"
Dim s2 As String = "animal"
Console.WriteLine("Comparison of '{0}' and '{1}': {2}",
s1, s2, String.Compare(s1, s2))
End Sub
End Module
' The example displays the following output:
' Comparison of 'ani-mal' and 'animal': 0
Para reconhecer caracteres ignoráveis numa comparação de cadeias, chama o Compare(String, String, StringComparison) método e fornece um valor de ou OrdinalOrdinalIgnoreCase para o comparisonType parâmetro.
Ver também
Aplica-se a
Compare(String, String, Boolean)
Compara dois objetos especificados String , ignorando ou respeitando o seu caso, e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.
public:
static int Compare(System::String ^ strA, System::String ^ strB, bool ignoreCase);
public static int Compare(string strA, string strB, bool ignoreCase);
static member Compare : string * string * bool -> int
Public Shared Function Compare (strA As String, strB As String, ignoreCase As Boolean) As Integer
Parâmetros
- strA
- String
A primeira cadeia de caracteres a ser comparada.
- strB
- String
A segunda string para comparar.
- ignoreCase
- Boolean
true ignorar o caso durante a comparação; caso contrário, false.
Devoluções
Um inteiro com sinal de 32 bits que indica a relação lexical entre os dois comparandos.
| Valor | Condição |
|---|---|
| Menos que zero |
strA precede strB na ordem de ordenação.
|
| Zero |
strA ocorre na mesma posição que strB na ordem de ordenação.
|
| Maior que zero |
strA segue-se strB na ordem de ordenação.
|
Exemplos
O exemplo seguinte demonstra que o Compare(String, String, Boolean) método é equivalente a usar ToUpper ou ToLower ao comparar cadeias.
// Create upper-case characters from their Unicode code units.
String stringUpper = "\x0041\x0042\x0043";
// Create lower-case characters from their Unicode code units.
String stringLower = "\x0061\x0062\x0063";
// Display the strings.
Console.WriteLine("Comparing '{0}' and '{1}':",
stringUpper, stringLower);
// Compare the uppercased strings; the result is true.
Console.WriteLine("The Strings are equal when capitalized? {0}",
String.Compare(stringUpper.ToUpper(), stringLower.ToUpper()) == 0
? "true" : "false");
// The previous method call is equivalent to this Compare method, which ignores case.
Console.WriteLine("The Strings are equal when case is ignored? {0}",
String.Compare(stringUpper, stringLower, true) == 0
? "true" : "false" );
// The example displays the following output:
// Comparing 'ABC' and 'abc':
// The Strings are equal when capitalized? true
// The Strings are equal when case is ignored? true
open System
// Create upper-case characters from their Unicode code units.
let stringUpper = "\x0041\x0042\x0043"
// Create lower-case characters from their Unicode code units.
let stringLower = "\x0061\x0062\x0063"
// Display the strings.
printfn $"Comparing '{stringUpper}' and '{stringLower}':"
// Compare the uppercased strings the result is true.
printfn $"The Strings are equal when capitalized? %b{String.Compare(stringUpper.ToUpper(), stringLower.ToUpper()) = 0}"
// The previous method call is equivalent to this Compare method, which ignores case.
printfn $"The Strings are equal when case is ignored? %b{String.Compare(stringUpper, stringLower, true) = 0}"
// The example displays the following output:
// Comparing 'ABC' and 'abc':
// The Strings are equal when capitalized? true
// The Strings are equal when case is ignored? true
Public Module Example
Public Sub Main()
' Create upper-case characters from their Unicode code units.
Dim stringUpper As String = ChrW(&H41) + ChrW(&H42) + ChrW(&H43)
' Create lower-case characters from their Unicode code units.
Dim stringLower As String = ChrW(&H61) + ChrW(&H62) + ChrW(&H63)
' Display the strings.
Console.WriteLine("Comparing '{0}' and '{1}':",
stringUpper, stringLower)
' Compare the uppercased strings; the result is true.
Console.WriteLine("The Strings are equal when capitalized? {0}",
If(String.Compare(stringUpper.ToUpper(), stringLower.ToUpper()) = 0,
"true", "false"))
' The previous method call is equivalent to this Compare method, which ignores case.
Console.WriteLine("The Strings are equal when case is ignored? {0}",
If(String.Compare(stringUpper, stringLower, true) = 0,
"true", "false"))
End Sub
End Module
' The example displays the following output:
' Comparing 'ABC' and 'abc':
' The Strings are equal when capitalized? true
' The Strings are equal when case is ignored? true
Observações
A comparação utiliza a cultura atual para obter informações específicas da cultura, como regras de carcaça e a ordem alfabética dos caracteres individuais. Por exemplo, uma cultura pode especificar que certas combinações de caracteres sejam tratadas como um único carácter, ou que letras maiúsculas e minúsculas sejam comparadas de uma determinada forma, ou que a ordem de ordenação de um carácter depende dos caracteres que o precedem ou seguem.
A comparação é feita usando regras de ordenação de palavras. Para mais informações sobre ordenações de palavra, cadeia e ordinais, veja System.Globalization.CompareOptions.
Warning
Ao comparar cadeias, deve chamar o Compare(String, String, StringComparison) método, o que exige que especifique explicitamente o tipo de comparação de cadeias que o método utiliza. Para obter mais informações, consulte Práticas recomendadas para o uso de cadeias de caracteres.
Um ou ambos os comparandos podem ser null. Por definição, qualquer cadeia, incluindo a cadeia vazia (""), compara-se maior do que uma referência nula; e duas referências nulas comparam-se iguais entre si.
A comparação termina quando uma desigualdade é descoberta ou ambas as cadeias foram comparadas. No entanto, se as duas cadeias forem iguais ao fim de uma sequência, e a outra cadeia tiver caracteres restantes, então a cadeia com caracteres restantes é considerada maior. O valor de retorno é o resultado da última comparação realizada.
Resultados inesperados podem ocorrer quando as comparações são afetadas por regras de revestimento específicas da cultura. Por exemplo, em turco, o seguinte exemplo produz resultados errados porque o sistema de ficheiros em turco não utiliza regras linguísticas de maiúscula para a letra "i" em "file".
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, true) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
Return True
Else
Return False
End If
End Function
Compare o nome do caminho com "ficheiro" usando uma comparação ordinal. O código correto para isto é o seguinte:
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
Return True
Else
Return False
End If
End Function
Notas para Chamadores
Os conjuntos de caracteres incluem personagens ignoráveis. O Compare(String, String, Boolean) método não considera tais caracteres quando realiza uma comparação sensível à cultura. Por exemplo, uma comparação sensível à cultura e insensível a maiúsculas minúsculas de "animal" com "Ani-mal" (usando um hífen suave, ou U+00AD) indica que as duas cadeias são equivalentes.
string s1 = "Ani\u00ADmal";
string s2 = "animal";
Console.WriteLine("Comparison of '{0}' and '{1}': {2}",
s1, s2, String.Compare(s1, s2, true));
// The example displays the following output:
// Comparison of 'Ani-mal' and 'animal': 0
open System
let s1 = "Ani\u00ADmal"
let s2 = "animal"
printfn $"Comparison of '{s1}' and '{s2}': {String.Compare(s1, s2, true)}"
// The example displays the following output:
// Comparison of 'Ani-mal' and 'animal': 0
Module Example
Public Sub Main()
Dim s1 As String = "Ani" + ChrW(&h00AD) + "mal"
Dim s2 As String = "animal"
Console.WriteLine("Comparison of '{0}' and '{1}': {2}",
s1, s2, String.Compare(s1, s2, True))
End Sub
End Module
' The example displays the following output:
' Comparison of 'ani-mal' and 'animal': 0
Para reconhecer caracteres ignoráveis numa comparação de cadeias, chama o Compare(String, String, StringComparison) método e fornece um valor de ou OrdinalOrdinalIgnoreCase para o comparisonType parâmetro.
Ver também
Aplica-se a
Compare(String, String, StringComparison)
Compara dois objetos especificados String usando as regras especificadas e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.
public:
static int Compare(System::String ^ strA, System::String ^ strB, StringComparison comparisonType);
public static int Compare(string strA, string strB, StringComparison comparisonType);
static member Compare : string * string * StringComparison -> int
Public Shared Function Compare (strA As String, strB As String, comparisonType As StringComparison) As Integer
Parâmetros
- strA
- String
A primeira cadeia de caracteres a ser comparada.
- strB
- String
A segunda string para comparar.
- comparisonType
- StringComparison
Um dos valores de enumeração que especifica as regras a usar na comparação.
Devoluções
Um inteiro com sinal de 32 bits que indica a relação lexical entre os dois comparandos.
| Valor | Condição |
|---|---|
| Menos que zero |
strA precede strB na ordem de ordenação.
|
| Zero |
strA está na mesma posição que strB na ordem de ordenação.
|
| Maior que zero |
strA segue-se strB na ordem de ordenação.
|
Exceções
comparisonType não é um StringComparison valor.
StringComparison não é suportado.
Exemplos
O exemplo seguinte compara três versões da letra "I". Os resultados são influenciados pela escolha da cultura, se o caso é ignorado e se é realizada uma comparação ordinal.
// This example demonstrates the
// System.String.Compare(String, String, StringComparison) method.
using System;
using System.Threading;
class Sample
{
public static void Main()
{
string intro = "Compare three versions of the letter I using different " +
"values of StringComparison.";
// Define an array of strings where each element contains a version of the
// letter I. (An array of strings is used so you can easily modify this
// code example to test additional or different combinations of strings.)
string[] threeIs = new string[3];
// LATIN SMALL LETTER I (U+0069)
threeIs[0] = "\u0069";
// LATIN SMALL LETTER DOTLESS I (U+0131)
threeIs[1] = "\u0131";
// LATIN CAPITAL LETTER I (U+0049)
threeIs[2] = "\u0049";
string[] unicodeNames =
{
"LATIN SMALL LETTER I (U+0069)",
"LATIN SMALL LETTER DOTLESS I (U+0131)",
"LATIN CAPITAL LETTER I (U+0049)"
};
StringComparison[] scValues =
{
StringComparison.CurrentCulture,
StringComparison.CurrentCultureIgnoreCase,
StringComparison.InvariantCulture,
StringComparison.InvariantCultureIgnoreCase,
StringComparison.Ordinal,
StringComparison.OrdinalIgnoreCase
};
Console.Clear();
Console.WriteLine(intro);
// Display the current culture because the culture-specific comparisons
// can produce different results with different cultures.
Console.WriteLine(
"The current culture is {0}.\n", Thread.CurrentThread.CurrentCulture.Name);
// Determine the relative sort order of three versions of the letter I.
foreach (StringComparison sc in scValues)
{
Console.WriteLine("StringComparison.{0}:", sc);
// LATIN SMALL LETTER I (U+0069) : LATIN SMALL LETTER DOTLESS I (U+0131)
Test(0, 1, sc, threeIs, unicodeNames);
// LATIN SMALL LETTER I (U+0069) : LATIN CAPITAL LETTER I (U+0049)
Test(0, 2, sc, threeIs, unicodeNames);
// LATIN SMALL LETTER DOTLESS I (U+0131) : LATIN CAPITAL LETTER I (U+0049)
Test(1, 2, sc, threeIs, unicodeNames);
Console.WriteLine();
}
}
protected static void Test(
int x, int y, StringComparison comparison, string[] testI, string[] testNames)
{
string resultFmt = "{0} is {1} {2}";
string result = "equal to";
int cmpValue = 0;
cmpValue = String.Compare(testI[x], testI[y], comparison);
if (cmpValue < 0)
result = "less than";
else if (cmpValue > 0)
result = "greater than";
Console.WriteLine(resultFmt, testNames[x], result, testNames[y]);
}
}
/*
This code example produces the following results:
Compare three versions of the letter I using different values of StringComparison.
The current culture is en-US.
StringComparison.CurrentCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.CurrentCultureIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.InvariantCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.InvariantCultureIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.Ordinal:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.OrdinalIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
*/
// This example demonstrates the
// System.String.Compare(String, String, StringComparison) method.
open System
open System.Threading
let test x y (comparison: StringComparison) (testI: string[]) (testNames: string[]) =
let cmpValue = String.Compare(testI[x], testI[y], comparison)
let result =
if cmpValue < 0 then
"less than"
elif cmpValue > 0 then
"greater than"
else
"equal to"
printfn $"{testNames[x]} is {result} {testNames[y]}"
let intro = "Compare three versions of the letter I using different values of StringComparison."
// Define an array of strings where each element contains a version of the
// letter I. (An array of strings is used so you can easily modify this
// code example to test additional or different combinations of strings.)
let threeIs =
[|// LATIN SMALL LETTER I (U+0069)
"\u0069"
// LATIN SMALL LETTER DOTLESS I (U+0131)
"\u0131"
// LATIN CAPITAL LETTER I (U+0049)
"\u0049" |]
let unicodeNames =
[| "LATIN SMALL LETTER I (U+0069)"
"LATIN SMALL LETTER DOTLESS I (U+0131)"
"LATIN CAPITAL LETTER I (U+0049)" |]
let scValues =
[| StringComparison.CurrentCulture
StringComparison.CurrentCultureIgnoreCase
StringComparison.InvariantCulture
StringComparison.InvariantCultureIgnoreCase
StringComparison.Ordinal
StringComparison.OrdinalIgnoreCase |]
Console.Clear()
printfn $"{intro}"
// Display the current culture because the culture-specific comparisons
// can produce different results with different cultures.
printfn $"The current culture is {Thread.CurrentThread.CurrentCulture.Name}.\n"
// Determine the relative sort order of three versions of the letter I.
for sc in scValues do
printfn $"StringComparison.{sc}:"
// LATIN SMALL LETTER I (U+0069) : LATIN SMALL LETTER DOTLESS I (U+0131)
test 0 1 sc threeIs unicodeNames
// LATIN SMALL LETTER I (U+0069) : LATIN CAPITAL LETTER I (U+0049)
test 0 2 sc threeIs unicodeNames
// LATIN SMALL LETTER DOTLESS I (U+0131) : LATIN CAPITAL LETTER I (U+0049)
test 1 2 sc threeIs unicodeNames
printfn ""
(*
This code example produces the following results:
Compare three versions of the letter I using different values of StringComparison.
The current culture is en-US.
StringComparison.CurrentCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.CurrentCultureIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.InvariantCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.InvariantCultureIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.Ordinal:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.OrdinalIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
*)
' This example demonstrates the
' System.String.Compare(String, String, StringComparison) method.
Imports System.Threading
Class Sample
Public Shared Sub Main()
Dim intro As String = "Compare three versions of the letter I using different " & _
"values of StringComparison."
' Define an array of strings where each element contains a version of the
' letter I. (An array of strings is used so you can easily modify this
' code example to test additional or different combinations of strings.)
Dim threeIs(2) As String
' LATIN SMALL LETTER I (U+0069)
threeIs(0) = "i"
' LATIN SMALL LETTER DOTLESS I (U+0131)
threeIs(1) = "ı"
' LATIN CAPITAL LETTER I (U+0049)
threeIs(2) = "I"
Dim unicodeNames As String() = { _
"LATIN SMALL LETTER I (U+0069)", _
"LATIN SMALL LETTER DOTLESS I (U+0131)", _
"LATIN CAPITAL LETTER I (U+0049)" }
Dim scValues As StringComparison() = { _
StringComparison.CurrentCulture, _
StringComparison.CurrentCultureIgnoreCase, _
StringComparison.InvariantCulture, _
StringComparison.InvariantCultureIgnoreCase, _
StringComparison.Ordinal, _
StringComparison.OrdinalIgnoreCase }
'
Console.Clear()
Console.WriteLine(intro)
' Display the current culture because the culture-specific comparisons
' can produce different results with different cultures.
Console.WriteLine("The current culture is {0}." & vbCrLf, _
Thread.CurrentThread.CurrentCulture.Name)
' Determine the relative sort order of three versions of the letter I.
Dim sc As StringComparison
For Each sc In scValues
Console.WriteLine("StringComparison.{0}:", sc)
' LATIN SMALL LETTER I (U+0069) : LATIN SMALL LETTER DOTLESS I (U+0131)
Test(0, 1, sc, threeIs, unicodeNames)
' LATIN SMALL LETTER I (U+0069) : LATIN CAPITAL LETTER I (U+0049)
Test(0, 2, sc, threeIs, unicodeNames)
' LATIN SMALL LETTER DOTLESS I (U+0131) : LATIN CAPITAL LETTER I (U+0049)
Test(1, 2, sc, threeIs, unicodeNames)
Console.WriteLine()
Next sc
End Sub
Protected Shared Sub Test(ByVal x As Integer, ByVal y As Integer, _
ByVal comparison As StringComparison, _
ByVal testI() As String, ByVal testNames() As String)
Dim resultFmt As String = "{0} is {1} {2}"
Dim result As String = "equal to"
Dim cmpValue As Integer = 0
'
cmpValue = String.Compare(testI(x), testI(y), comparison)
If cmpValue < 0 Then
result = "less than"
ElseIf cmpValue > 0 Then
result = "greater than"
End If
Console.WriteLine(resultFmt, testNames(x), result, testNames(y))
End Sub
End Class
'
'This code example produces the following results:
'
'Compare three versions of the letter I using different values of StringComparison.
'The current culture is en-US.
'
'StringComparison.CurrentCulture:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
'StringComparison.CurrentCultureIgnoreCase:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
'StringComparison.InvariantCulture:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
'StringComparison.InvariantCultureIgnoreCase:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
'StringComparison.Ordinal:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
'StringComparison.OrdinalIgnoreCase:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
Observações
O comparisonType parâmetro indica se a comparação deve usar a cultura atual ou invariante, respeitar ou ignorar o caso dos comparandos, ou usar regras de ordenação por palavra (sensível à cultura) ou ordinal (insensível à cultura).
Um ou ambos os comparandos podem ser null. Por definição, qualquer cadeia, incluindo a cadeia vazia (""), compara-se maior do que uma referência nula; e duas referências nulas comparam-se iguais entre si.
A comparação termina quando uma desigualdade é descoberta ou ambas as cadeias foram comparadas. No entanto, se as duas cadeias forem iguais ao fim de uma cadeia, e a outra cadeia tiver caracteres restantes, a cadeia com caracteres restantes é considerada maior. O valor de retorno é o resultado da última comparação realizada.
Resultados inesperados podem ocorrer quando as comparações são afetadas por regras de revestimento específicas da cultura. Por exemplo, em turco, o seguinte exemplo produz resultados errados porque o sistema de ficheiros em turco não utiliza regras linguísticas de maiúscula para a letra "i" em "file".
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, true) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
Return True
Else
Return False
End If
End Function
Compare o nome do caminho com "ficheiro" usando uma comparação ordinal. O código correto para isto é o seguinte:
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
Return True
Else
Return False
End If
End Function
Notas para Chamadores
Os conjuntos de caracteres incluem personagens ignoráveis. O Compare(String, String, StringComparison) método não considera tais caracteres quando realiza uma comparação sensível à cultura. Para reconhecer caracteres ignoráveis na sua comparação, forneça um valor de Ordinal ou OrdinalIgnoreCase para o comparisonType parâmetro.
Ver também
Aplica-se a
Compare(String, String, Boolean, CultureInfo)
Compara dois objetos especificados String , ignorando ou respeitando o seu caso, e usando informação específica da cultura para influenciar a comparação, e retorna um inteiro que indica a sua posição relativa na ordem de ordenação.
public:
static int Compare(System::String ^ strA, System::String ^ strB, bool ignoreCase, System::Globalization::CultureInfo ^ culture);
public static int Compare(string strA, string strB, bool ignoreCase, System.Globalization.CultureInfo culture);
static member Compare : string * string * bool * System.Globalization.CultureInfo -> int
Public Shared Function Compare (strA As String, strB As String, ignoreCase As Boolean, culture As CultureInfo) As Integer
Parâmetros
- strA
- String
A primeira cadeia de caracteres a ser comparada.
- strB
- String
A segunda string para comparar.
- ignoreCase
- Boolean
true ignorar o caso durante a comparação; caso contrário, false.
- culture
- CultureInfo
Um objeto que forneça informação de comparação específica por cultura. Se culture for igual a null, a cultura atual é usada.
Devoluções
Um inteiro com sinal de 32 bits que indica a relação lexical entre os dois comparandos.
| Valor | Condição |
|---|---|
| Menos que zero |
strA precede strB na ordem de ordenação.
|
| Zero |
strA ocorre na mesma posição que strB na ordem de ordenação.
|
| Maior que zero |
strA segue-se strB na ordem de ordenação.
|
Exemplos
O exemplo seguinte demonstra como a cultura pode afetar uma comparação. Na cultura checo-República Checa, "ch" é um único carácter maior que "d". No entanto, na cultura anglo-Estados Unidos, "ch" consiste em dois caracteres, e "c" é menor que "d".
public static void Main()
{
String str1 = "change";
String str2 = "dollar";
String relation;
relation = symbol(String.Compare(str1, str2, false, new CultureInfo("en-US")));
Console.WriteLine("For en-US: {0} {1} {2}", str1, relation, str2);
relation = symbol(String.Compare(str1, str2, false, new CultureInfo("cs-CZ")));
Console.WriteLine("For cs-CZ: {0} {1} {2}", str1, relation, str2);
}
private static String symbol(int r)
{
String s = "=";
if (r < 0) s = "<";
else if (r > 0) s = ">";
return s;
}
/*
This example produces the following results.
For en-US: change < dollar
For cs-CZ: change > dollar
*/
let symbol r =
if r < 0 then "<"
elif r > 0 then ">"
else "="
let str1 = "change"
let str2 = "dollar"
let relation1 =
String.Compare(str1, str2, false, CultureInfo "en-US")
|> symbol
printfn $"For en-US: {str1} {relation1} {str2}"
let relation2 =
String.Compare(str1, str2, false, CultureInfo "cs-CZ")
|> symbol
printfn $"For cs-CZ: {str1} {relation2} {str2}"
(*
This example produces the following results.
For en-US: change < dollar
For cs-CZ: change > dollar
*)
Imports System.Globalization
_
Class Sample
Public Shared Sub Main()
Dim str1 As [String] = "change"
Dim str2 As [String] = "dollar"
Dim relation As [String] = Nothing
relation = symbol([String].Compare(str1, str2, False, New CultureInfo("en-US")))
Console.WriteLine("For en-US: {0} {1} {2}", str1, relation, str2)
relation = symbol([String].Compare(str1, str2, False, New CultureInfo("cs-CZ")))
Console.WriteLine("For cs-CZ: {0} {1} {2}", str1, relation, str2)
End Sub
Private Shared Function symbol(r As Integer) As [String]
Dim s As [String] = "="
If r < 0 Then
s = "<"
Else
If r > 0 Then
s = ">"
End If
End If
Return s
End Function 'symbol
End Class
'
'This example produces the following results.
'For en-US: change < dollar
'For cs-CZ: change > dollar
'
Observações
A comparação utiliza o culture parâmetro para obter informações específicas de cada cultura, como regras de revestimento e a ordem alfabética dos caracteres individuais. Por exemplo, uma cultura pode especificar que certas combinações de caracteres sejam tratadas como um único carácter, ou que letras maiúsculas e minúsculas sejam comparadas de uma determinada forma, ou que a ordem de ordenação de um carácter depende dos caracteres que o precedem ou seguem.
A comparação é feita usando regras de ordenação de palavras. Para mais informações sobre ordenações de palavra, cadeia e ordinais, veja System.Globalization.CompareOptions.
Um ou ambos os comparandos podem ser null. Por definição, qualquer cadeia, incluindo a cadeia vazia (""), compara-se maior do que uma referência nula; e duas referências nulas comparam-se iguais entre si.
A comparação termina quando uma desigualdade é descoberta ou ambas as cadeias foram comparadas. No entanto, se as duas cadeias forem iguais ao fim de uma sequência, e a outra cadeia tiver caracteres restantes, então a cadeia com caracteres restantes é considerada maior. O valor de retorno é o resultado da última comparação realizada.
Resultados inesperados podem ocorrer quando as comparações são afetadas por regras de revestimento específicas da cultura. Por exemplo, em turco, o seguinte exemplo produz resultados errados porque o sistema de ficheiros em turco não utiliza regras linguísticas de maiúscula para a letra "i" em "file".
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, true) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
Return True
Else
Return False
End If
End Function
Compare o nome do caminho com "ficheiro" usando uma comparação ordinal. O código correto para isto é o seguinte:
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
Return True
Else
Return False
End If
End Function
Notas para Chamadores
Os conjuntos de caracteres incluem personagens ignoráveis. O Compare(String, String, Boolean, CultureInfo) método não considera tais caracteres quando realiza uma comparação sensível à cultura. Por exemplo, se o código seguinte for executado no .NET Framework 4 ou posterior, uma comparação insensível a maiúsculas e minúsculas de "animal" com "Ani-mal" (usando um hífen suave, ou U+00AD) usando a cultura invariante indica que as duas cadeias são equivalentes.
string s1 = "Ani\u00ADmal";
string s2 = "animal";
Console.WriteLine("Comparison of '{0}' and '{1}': {2}",
s1, s2, String.Compare(s1, s2, true,
CultureInfo.InvariantCulture));
// The example displays the following output:
// Comparison of 'Ani-mal' and 'animal': 0
open System
open System.Globalization
let s1 = "Ani\u00ADmal"
let s2 = "animal"
printfn $"Comparison of '{s1}' and '{s2}': {String.Compare(s1, s2, true, CultureInfo.InvariantCulture)}"
// The example displays the following output:
// Comparison of 'Ani-mal' and 'animal': 0
Imports System.Globalization
Module Example
Public Sub Main()
Dim s1 As String = "Ani" + ChrW(&h00AD) + "mal"
Dim s2 As String = "animal"
Console.WriteLine("Comparison of '{0}' and '{1}': {2}",
s1, s2, String.Compare(s1, s2, True,
CultureInfo.InvariantCulture))
End Sub
End Module
' The example displays the following output:
' Comparison of 'ani-mal' and 'animal': 0
Para reconhecer caracteres ignoráveis numa comparação de cadeias, chama o Compare(String, String, CultureInfo, CompareOptions) método e fornece um valor de ou OrdinalOrdinalIgnoreCase para o options parâmetro.
Ver também
- Int32
- CompareOrdinal(String, String)
- CompareTo(Object)
- IsPrefix(String, String, CompareOptions)
- Boolean
Aplica-se a
Compare(String, String, CultureInfo, CompareOptions)
Compara dois objetos especificados String usando as opções de comparação especificadas e informação específica da cultura para influenciar a comparação, e retorna um inteiro que indica a relação das duas cadeias entre si na ordem de ordenação.
public:
static int Compare(System::String ^ strA, System::String ^ strB, System::Globalization::CultureInfo ^ culture, System::Globalization::CompareOptions options);
public static int Compare(string strA, string strB, System.Globalization.CultureInfo culture, System.Globalization.CompareOptions options);
static member Compare : string * string * System.Globalization.CultureInfo * System.Globalization.CompareOptions -> int
Public Shared Function Compare (strA As String, strB As String, culture As CultureInfo, options As CompareOptions) As Integer
Parâmetros
- strA
- String
A primeira cadeia de caracteres a ser comparada.
- strB
- String
A segunda string para comparar.
- culture
- CultureInfo
A cultura que fornece informação de comparação específica para culturas. Se culture for igual a null, a cultura atual é usada.
- options
- CompareOptions
Opções a usar ao realizar a comparação (como ignorar casos ou símbolos).
Devoluções
Um inteiro com sinal de 32 bits que indica a relação lexical entre strA e strB, conforme mostrado na tabela seguinte
| Valor | Condição |
|---|---|
| Menos que zero |
strA precede strB na ordem de ordenação.
|
| Zero |
strA ocorre na mesma posição que strB na ordem de ordenação.
|
| Maior que zero |
strA segue-se strB na ordem de ordenação.
|
Exceções
options não é um CompareOptions valor.
Exemplos
O exemplo seguinte compara duas cadeias de três formas diferentes: Use a comparação linguística para a cultura en-US; usar comparação linguística sensível a maiúsculas minúsculas para a cultura en-US; e usando uma comparação ordinal. Ilustra como os três métodos de comparação produzem três resultados diferentes.
using System;
using System.Globalization;
public class Example0
{
public static void Main()
{
string string1 = "brother";
string string2 = "Brother";
string relation;
int result;
// Cultural (linguistic) comparison.
result = String.Compare(string1, string2, new CultureInfo("en-US"),
CompareOptions.None);
if (result > 0)
relation = "comes after";
else if (result == 0)
relation = "is the same as";
else
relation = "comes before";
Console.WriteLine("'{0}' {1} '{2}'.",
string1, relation, string2);
// Cultural (linguistic) case-insensitive comparison.
result = String.Compare(string1, string2, new CultureInfo("en-US"),
CompareOptions.IgnoreCase);
if (result > 0)
relation = "comes after";
else if (result == 0)
relation = "is the same as";
else
relation = "comes before";
Console.WriteLine("'{0}' {1} '{2}'.",
string1, relation, string2);
// Culture-insensitive ordinal comparison.
result = String.CompareOrdinal(string1, string2);
if (result > 0)
relation = "comes after";
else if (result == 0)
relation = "is the same as";
else
relation = "comes before";
Console.WriteLine("'{0}' {1} '{2}'.",
string1, relation, string2);
// The example produces the following output:
// 'brother' comes before 'Brother'.
// 'brother' is the same as 'Brother'.
// 'brother' comes after 'Brother'.
}
}
open System
open System.Globalization
let string1 = "brother"
let string2 = "Brother"
// Cultural (linguistic) comparison.
let result = String.Compare(string1, string2, CultureInfo "en-US", CompareOptions.None)
let relation =
if result > 0 then "comes after"
elif result = 0 then "is the same as"
else "comes before"
printfn $"'{string1}' {relation} '{string2}'."
// Cultural (linguistic) case-insensitive comparison.
let result2 = String.Compare(string1, string2, CultureInfo "en-US", CompareOptions.IgnoreCase)
let relation2 =
if result2 > 0 then "comes after"
elif result2 = 0 then "is the same as"
else "comes before"
printfn $"'{string1}' {relation2} '{string2}'."
// Culture-insensitive ordinal comparison.
let result3 = String.CompareOrdinal(string1, string2)
let relation3 =
if result2 > 0 then "comes after"
elif result2 = 0 then "is the same as"
else "comes before"
printfn $"'{string1}' {relation} '{string2}'."
// The example produces the following output:
// 'brother' comes before 'Brother'.
// 'brother' is the same as 'Brother'.
// 'brother' comes after 'Brother'.
Imports System.Globalization
Public Module Example
Public Sub Main()
Dim string1 As String = "brother"
Dim string2 As String = "Brother"
Dim relation As String
Dim result As Integer
' Cultural (linguistic) comparison.
result = String.Compare(string1, string2, _
New CultureInfo("en-US"), CompareOptions.None)
If result > 0 Then
relation = "comes after"
ElseIf result = 0 Then
relation = "is the same as"
Else
relation = "comes before"
End If
Console.WriteLine("'{0}' {1} '{2}'.", string1, relation, string2)
' Cultural (linguistic) case-insensitive comparison.
result = String.Compare(string1, string2, _
New CultureInfo("en-US"), CompareOptions.IgnoreCase)
If result > 0 Then
relation = "comes after"
ElseIf result = 0 Then
relation = "is the same as"
Else
relation = "comes before"
End If
Console.WriteLine("'{0}' {1} '{2}'.", string1, relation, string2)
' Culture-insensitive ordinal comparison.
result = String.CompareOrdinal(string1, string2)
If result > 0 Then
relation = "comes after"
ElseIf result = 0 Then
relation = "is the same as"
Else
relation = "comes before"
End If
Console.WriteLine("'{0}' {1} '{2}'.", string1, relation, string2)
End Sub
End Module
' The example produces the following output:
' 'brother' comes before 'Brother'.
' 'brother' is the same as 'Brother'.
' 'brother' comes after 'Brother'.
Observações
A comparação utiliza o culture parâmetro para obter informação específica da cultura, como regras de revestimento e a ordem alfabética dos caracteres individuais. Por exemplo, uma cultura particular poderia especificar que certas combinações de caracteres fossem tratadas como um único carácter, que os caracteres maiúsculos e minúsculos fossem comparados de uma determinada forma, ou que a ordem de ordem de um carácter dependesse dos caracteres que o precedem ou se seguem.
Atenção
O Compare(String, String, CultureInfo, CompareOptions) método foi concebido principalmente para uso em operações de ordenação ou ordenação alfabética. Não deve ser usado quando o objetivo principal da chamada ao método é determinar se duas cadeias são equivalentes (ou seja, quando o objetivo da chamada do método é testar um valor de retorno zero). Para determinar se duas cadeias são equivalentes, chama-se o Equals método.
A comparação pode ser ainda especificada pelo options parâmetro, que consiste em um ou mais membros da CompareOptions enumeração. No entanto, como o objetivo deste método é realizar uma comparação de cordas sensível à cultura, os CompareOptions.Ordinal valores e CompareOptions.OrdinalIgnoreCase não têm efeito.
Um ou ambos os comparandos podem ser null. Por definição, qualquer cadeia, incluindo String.Empty, compara-se maior do que uma referência nula, e duas referências nulas comparam-se iguais entre si.
A comparação termina quando uma desigualdade é descoberta ou ambas as cadeias foram comparadas. No entanto, se as duas cadeias forem iguais ao fim de uma cadeia, e a outra cadeia tiver caracteres restantes, a cadeia com os caracteres restantes é considerada maior.
Notas para Chamadores
Os conjuntos de caracteres incluem caracteres ignoráveis, que são caracteres que não são considerados ao realizar uma comparação sensível à cultura ou linguística. O Compare(String, String, CultureInfo, CompareOptions) método não considera tais caracteres quando realiza uma comparação sensível à cultura. Para reconhecer caracteres ignoráveis na sua comparação, forneça um valor de Ordinal ou OrdinalIgnoreCase para o options parâmetro.
Ver também
Aplica-se a
Compare(String, Int32, String, Int32, Int32)
Compara subcadeias de dois objetos especificados String e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.
public:
static int Compare(System::String ^ strA, int indexA, System::String ^ strB, int indexB, int length);
public static int Compare(string strA, int indexA, string strB, int indexB, int length);
static member Compare : string * int * string * int * int -> int
Public Shared Function Compare (strA As String, indexA As Integer, strB As String, indexB As Integer, length As Integer) As Integer
Parâmetros
- strA
- String
A primeira corda a usar na comparação.
- indexA
- Int32
A posição da subcadeia dentro strAde .
- strB
- String
A segunda corda a usar na comparação.
- indexB
- Int32
A posição da subcadeia dentro strBde .
- length
- Int32
O número máximo de caracteres nas substrings a comparar.
Devoluções
Um inteiro com sinal de 32 bits que indica a relação lexical entre os dois comparandos.
| Valor | Condição |
|---|---|
| Menos que zero | A subcadeia em strA precede a subcadeia em strB na ordem de ordenação.
|
| Zero | As subcadeias ocorrem na mesma posição na ordem de ordenação, ou length é zero.
|
| Maior que zero | A subcadeia em strA segue a subcadeia em strB na ordem de ordenação.
|
Exceções
indexA é maior do que strA.Length.
-ou-
indexB é maior do que strB.Length.
-ou-
indexA, indexB, ou length é negativo.
-ou-
Ou indexA é indexBnull, e length é maior que zero.
Exemplos
O exemplo seguinte compara duas subcadeias.
String str1 = "machine";
String str2 = "device";
String str;
int result;
Console.WriteLine();
Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2);
result = String.Compare(str1, 2, str2, 0, 2);
str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1);
Console.Write("{0} ", str);
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(0, 2), str2);
/*
This example produces the following results:
str1 = 'machine', str2 = 'device'
Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
*/
open System
let str1 = "machine"
let str2 = "device"
printfn "\nstr1 = '{str1}', str2 = '{str2}'"
let result = String.Compare(str1, 2, str2, 0, 2)
let str =
if result < 0 then "less than"
elif result > 0 then "greater than"
else "equal to"
printf $"Substring '{str1.Substring(2, 2)}' in '{str1}' is "
printf $"{str} "
printfn $"substring '{str2.Substring(0, 2)}' in '{str2}'."
(*
This example produces the following results:
str1 = 'machine', str2 = 'device'
Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
*)
' Sample for String.Compare(String, Int32, String, Int32, Int32)
Class Sample
Public Shared Sub Main()
' 0123456
Dim str1 As [String] = "machine"
Dim str2 As [String] = "device"
Dim str As [String]
Dim result As Integer
Console.WriteLine()
Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2)
result = [String].Compare(str1, 2, str2, 0, 2)
str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1)
Console.Write("{0} ", str)
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(0, 2), str2)
End Sub
End Class
'
'This example produces the following results:
'
'str1 = 'machine', str2 = 'device'
'Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
'
Observações
As subcadeias a comparar começam em strA em indexA e em strB em indexB. Tanto indexA como indexB são baseados em zero; ou seja, o primeiro carácter em strA e strB está na posição zero. O comprimento da primeira subcorda é igual ao comprimento de strA menos indexA mais um. O comprimento da segunda subcorda é igual ao comprimento de strB menos indexB mais um.
O número de caracteres a comparar é o menor dos comprimentos das duas substrings, e length. Os indexAparâmetros , indexB, e length devem ser não negativos.
A comparação utiliza a cultura atual para obter informações específicas da cultura, como regras de carcaça e a ordem alfabética dos caracteres individuais. Por exemplo, uma cultura pode especificar que certas combinações de caracteres sejam tratadas como um único carácter, ou que letras maiúsculas e minúsculas sejam comparadas de uma determinada forma, ou que a ordem de ordenação de um carácter depende dos caracteres que o precedem ou seguem.
A comparação é feita usando regras de ordenação de palavras. Para mais informações sobre ordenações de palavra, cadeia e ordinais, veja System.Globalization.CompareOptions.
Warning
Ao comparar cadeias, deve chamar o Compare(String, Int32, String, Int32, Int32, StringComparison) método, o que exige que especifique explicitamente o tipo de comparação de cadeias que o método utiliza. Para obter mais informações, consulte Práticas recomendadas para o uso de cadeias de caracteres.
Um ou ambos os comparandos podem ser null. Por definição, qualquer cadeia, incluindo a cadeia vazia (""), compara-se maior do que uma referência nula; e duas referências nulas comparam-se iguais entre si.
A comparação termina quando uma desigualdade é descoberta ou ambas as subcadeias foram comparadas. No entanto, se as duas cadeias forem iguais ao fim de uma sequência, e a outra cadeia tiver caracteres restantes, então a cadeia com caracteres restantes é considerada maior. O valor de retorno é o resultado da última comparação realizada.
Resultados inesperados podem ocorrer quando as comparações são afetadas por regras de revestimento específicas da cultura. Por exemplo, em turco, o seguinte exemplo produz resultados errados porque o sistema de ficheiros em turco não utiliza regras linguísticas de maiúscula para a letra "i" em "file".
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, true) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
Return True
Else
Return False
End If
End Function
Compare o nome do caminho com "ficheiro" usando uma comparação ordinal. O código correto para isto é o seguinte:
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
Return True
Else
Return False
End If
End Function
Notas para Chamadores
Os conjuntos de caracteres incluem personagens ignoráveis. O Compare(String, Int32, String, Int32, Int32) método não considera estes caracteres quando realiza uma comparação linguística ou sensível à cultura. Para reconhecer caracteres ignoráveis na sua comparação, chame o Compare(String, Int32, String, Int32, Int32, StringComparison) método e forneça um valor de Ordinal ou OrdinalIgnoreCase para o comparisonType parâmetro.
Ver também
Aplica-se a
Compare(String, Int32, String, Int32, Int32, Boolean)
Compara subcadeias de dois objetos especificados String , ignorando ou respeitando o seu caso, e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.
public:
static int Compare(System::String ^ strA, int indexA, System::String ^ strB, int indexB, int length, bool ignoreCase);
public static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase);
static member Compare : string * int * string * int * int * bool -> int
Public Shared Function Compare (strA As String, indexA As Integer, strB As String, indexB As Integer, length As Integer, ignoreCase As Boolean) As Integer
Parâmetros
- strA
- String
A primeira corda a usar na comparação.
- indexA
- Int32
A posição da subcadeia dentro strAde .
- strB
- String
A segunda corda a usar na comparação.
- indexB
- Int32
A posição da subcadeia dentro strBde .
- length
- Int32
O número máximo de caracteres nas substrings a comparar.
- ignoreCase
- Boolean
true ignorar o caso durante a comparação; caso contrário, false.
Devoluções
Um inteiro com sinal de 32 bits que indica a relação lexical entre os dois comparandos.
| Valor | Condição |
|---|---|
| Menos que zero | A subcadeia em strA precede a subcadeia em strB na ordem de ordenação.
|
| Zero | As subcadeias ocorrem na mesma posição na ordem de ordenação, ou length é zero.
|
| Maior que zero | A subcadeia em strA segue a subcadeia em strB na ordem de ordenação.
|
Exceções
indexA é maior do que strA.Length.
-ou-
indexB é maior do que strB.Length.
-ou-
indexA, indexB, ou length é negativo.
-ou-
Ou indexA é indexBnull, e length é maior que zero.
Exemplos
O exemplo seguinte realiza duas comparações de duas substrings que só diferem no caso. A primeira comparação ignora o caso e a segunda comparação considera o caso.
String str1 = "MACHINE";
String str2 = "machine";
String str;
int result;
Console.WriteLine();
Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2);
Console.WriteLine("Ignore case:");
result = String.Compare(str1, 2, str2, 2, 2, true);
str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1);
Console.Write("{0} ", str);
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(2, 2), str2);
Console.WriteLine();
Console.WriteLine("Honor case:");
result = String.Compare(str1, 2, str2, 2, 2, false);
str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1);
Console.Write("{0} ", str);
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(2, 2), str2);
/*
This example produces the following results:
str1 = 'MACHINE', str2 = 'machine'
Ignore case:
Substring 'CH' in 'MACHINE' is equal to substring 'ch' in 'machine'.
Honor case:
Substring 'CH' in 'MACHINE' is greater than substring 'ch' in 'machine'.
*/
open System
let str1 = "MACHINE"
let str2 = "machine"
printfn $"\nstr1 = '{str1}', str2 = '{str2}'"
printfn "Ignore case:"
let result = String.Compare(str1, 2, str2, 2, 2, true)
let str =
if result < 0 then "less than"
elif result > 0 then "greater than"
else "equal to"
printf $"Substring '{str1.Substring(2, 2)}' in '{str1}' is "
printf $"{str} "
printfn $"substring '{str2.Substring(2, 2)}' in '{str2}'.\n"
printfn "Honor case:"
let result2 = String.Compare(str1, 2, str2, 2, 2, false)
let str3 =
if result < 0 then "less than"
elif result > 0 then "greater than"
else "equal to"
printfn $"Substring '{str1.Substring(2, 2)}' in '{str1}' is "
printf $"{str3} "
printfn $"substring '{str2.Substring(2, 2)}' in '{str2}'."
(*
This example produces the following results:
str1 = 'MACHINE', str2 = 'machine'
Ignore case:
Substring 'CH' in 'MACHINE' is equal to substring 'ch' in 'machine'.
Honor case:
Substring 'CH' in 'MACHINE' is greater than substring 'ch' in 'machine'.
*)
' Sample for String.Compare(String, Int32, String, Int32, Int32, Boolean)
Class Sample
Public Shared Sub Main()
' 0123456
Dim str1 As [String] = "MACHINE"
Dim str2 As [String] = "machine"
Dim str As [String]
Dim result As Integer
Console.WriteLine()
Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2)
Console.WriteLine("Ignore case:")
result = [String].Compare(str1, 2, str2, 2, 2, True)
str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1)
Console.Write("{0} ", str)
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(2, 2), str2)
Console.WriteLine()
Console.WriteLine("Honor case:")
result = [String].Compare(str1, 2, str2, 2, 2, False)
str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1)
Console.Write("{0} ", str)
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(2, 2), str2)
End Sub
End Class
'
'This example produces the following results:
'
'str1 = 'MACHINE', str2 = 'machine'
'Ignore case:
'Substring 'CH' in 'MACHINE' is equal to substring 'ch' in 'machine'.
'
'Honor case:
'Substring 'CH' in 'MACHINE' is greater than substring 'ch' in 'machine'.
'
Observações
As subcadeias a comparar começam em strAindexA, e em strB em indexB. Tanto indexA como indexB são baseados em zero; ou seja, o primeiro carácter em strA e strB está na posição zero. O comprimento da primeira subcorda é igual ao comprimento de strA menos indexA mais um. O comprimento da segunda subcorda é igual ao comprimento de strB menos indexB mais um.
O número de caracteres a comparar é o menor dos comprimentos das duas substrings, e length. Os indexAparâmetros , indexB, e length devem ser não negativos.
A comparação utiliza a cultura atual para obter informações específicas da cultura, como regras de carcaça e a ordem alfabética dos caracteres individuais. Por exemplo, uma cultura pode especificar que certas combinações de caracteres sejam tratadas como um único carácter, ou que letras maiúsculas e minúsculas sejam comparadas de uma determinada forma, ou que a ordem de ordenação de um carácter depende dos caracteres que o precedem ou seguem.
A comparação é feita usando regras de ordenação de palavras. Para mais informações sobre ordenações de palavra, cadeia e ordinais, veja System.Globalization.CompareOptions.
Warning
Ao comparar cadeias, deve chamar o Compare(String, Int32, String, Int32, Int32, StringComparison) método, o que exige que especifique explicitamente o tipo de comparação de cadeias que o método utiliza. Para obter mais informações, consulte Práticas recomendadas para o uso de cadeias de caracteres.
Um ou ambos os comparandos podem ser null. Por definição, qualquer cadeia, incluindo a cadeia vazia (""), compara-se maior do que uma referência nula; e duas referências nulas comparam-se iguais entre si.
A comparação termina quando uma desigualdade é descoberta ou ambas as subcadeias foram comparadas. No entanto, se as duas cadeias forem iguais ao fim de uma sequência, e a outra cadeia tiver caracteres restantes, então a cadeia com caracteres restantes é considerada maior. O valor de retorno é o resultado da última comparação realizada.
Resultados inesperados podem ocorrer quando as comparações são afetadas por regras de revestimento específicas da cultura. Por exemplo, em turco, o seguinte exemplo produz resultados errados porque o sistema de ficheiros em turco não utiliza regras linguísticas de maiúscula para a letra "i" em "file".
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, true) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
Return True
Else
Return False
End If
End Function
O nome do caminho precisa de ser comparado de forma invariante. O código correto para isto é o seguinte.
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
Return True
Else
Return False
End If
End Function
Notas para Chamadores
Os conjuntos de caracteres incluem personagens ignoráveis. O Compare(String, Int32, String, Int32, Int32, Boolean) método não considera estes caracteres quando realiza uma comparação linguística ou sensível à cultura. Para reconhecer caracteres ignoráveis na sua comparação, chame o Compare(String, Int32, String, Int32, Int32, StringComparison) método e forneça um valor de Ordinal ou OrdinalIgnoreCase para o comparisonType parâmetro.
Ver também
Aplica-se a
Compare(String, Int32, String, Int32, Int32, StringComparison)
Compara substrings de dois objetos especificados String usando as regras especificadas e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.
public:
static int Compare(System::String ^ strA, int indexA, System::String ^ strB, int indexB, int length, StringComparison comparisonType);
public static int Compare(string strA, int indexA, string strB, int indexB, int length, StringComparison comparisonType);
static member Compare : string * int * string * int * int * StringComparison -> int
Public Shared Function Compare (strA As String, indexA As Integer, strB As String, indexB As Integer, length As Integer, comparisonType As StringComparison) As Integer
Parâmetros
- strA
- String
A primeira corda a usar na comparação.
- indexA
- Int32
A posição da subcadeia dentro strAde .
- strB
- String
A segunda corda a usar na comparação.
- indexB
- Int32
A posição da subcadeia dentro strBde .
- length
- Int32
O número máximo de caracteres nas substrings a comparar.
- comparisonType
- StringComparison
Um dos valores de enumeração que especifica as regras a usar na comparação.
Devoluções
Um inteiro com sinal de 32 bits que indica a relação lexical entre os dois comparandos.
| Valor | Condição |
|---|---|
| Menos que zero | A subcadeia em strA precede a subcadeia em strB na ordem de ordenação.
|
| Zero | As substrings ocorrem na mesma posição na ordem de ordenação, ou o length parâmetro é zero.
|
| Maior que zero | A subcadeia em strA segue a subcadeia em strB na ordem de ordenação.
|
Exceções
indexA é maior do que strA.Length.
-ou-
indexB é maior do que strB.Length.
-ou-
indexA, indexB, ou length é negativo.
-ou-
Ou indexA é indexBnull, e length é maior que zero.
comparisonType não é um StringComparison valor.
Exemplos
O exemplo seguinte compara duas subcadeias.
String str1 = "machine";
String str2 = "device";
String str;
int result;
Console.WriteLine();
Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2);
result = String.Compare(str1, 2, str2, 0, 2);
str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1);
Console.Write("{0} ", str);
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(0, 2), str2);
/*
This example produces the following results:
str1 = 'machine', str2 = 'device'
Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
*/
open System
let str1 = "machine"
let str2 = "device"
printfn "\nstr1 = '{str1}', str2 = '{str2}'"
let result = String.Compare(str1, 2, str2, 0, 2)
let str =
if result < 0 then "less than"
elif result > 0 then "greater than"
else "equal to"
printf $"Substring '{str1.Substring(2, 2)}' in '{str1}' is "
printf $"{str} "
printfn $"substring '{str2.Substring(0, 2)}' in '{str2}'."
(*
This example produces the following results:
str1 = 'machine', str2 = 'device'
Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
*)
' Sample for String.Compare(String, Int32, String, Int32, Int32)
Class Sample
Public Shared Sub Main()
' 0123456
Dim str1 As [String] = "machine"
Dim str2 As [String] = "device"
Dim str As [String]
Dim result As Integer
Console.WriteLine()
Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2)
result = [String].Compare(str1, 2, str2, 0, 2)
str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1)
Console.Write("{0} ", str)
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(0, 2), str2)
End Sub
End Class
'
'This example produces the following results:
'
'str1 = 'machine', str2 = 'device'
'Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
'
Observações
As subcadeias a comparar começam em strA em indexA e em strB em indexB. Tanto indexA como indexB são baseados em zero; ou seja, o primeiro carácter em strA e strB está na posição zero, não na posição um. O comprimento da primeira subcorda é igual ao comprimento de strA menos indexA mais um. O comprimento da segunda subcorda é igual ao comprimento de strB menos indexB mais um.
O número de caracteres a comparar é o menor dos comprimentos das duas substrings, e length. Os indexAparâmetros , indexB, e length devem ser não negativos.
O comparisonType parâmetro indica se a comparação deve usar a cultura atual ou invariante, respeitar ou ignorar o caso dos comparandos, ou usar regras de ordenação por palavra (sensível à cultura) ou ordinal (insensível à cultura).
Um ou ambos os comparandos podem ser null. Por definição, qualquer cadeia, incluindo a cadeia vazia (""), compara-se maior do que uma referência nula; e duas referências nulas comparam-se iguais entre si.
A comparação termina quando uma desigualdade é descoberta ou ambas as subcadeias foram comparadas. No entanto, se as duas cadeias forem iguais ao fim de uma cadeia, e a outra cadeia tiver caracteres restantes, a cadeia com caracteres restantes é considerada maior. O valor de retorno é o resultado da última comparação realizada.
Resultados inesperados podem ocorrer quando as comparações são afetadas por regras de revestimento específicas da cultura. Por exemplo, em turco, o seguinte exemplo produz resultados errados porque o sistema de ficheiros em turco não utiliza regras linguísticas de maiúscula para a letra "i" em "file".
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, true) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
Return True
Else
Return False
End If
End Function
Compare o nome do caminho com "ficheiro" usando uma comparação ordinal. O código correto para isto é o seguinte:
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
Return True
Else
Return False
End If
End Function
Notas para Chamadores
Os conjuntos de caracteres incluem personagens ignoráveis. O Compare(String, Int32, String, Int32, Int32, StringComparison) método não considera estes caracteres quando realiza uma comparação linguística ou sensível à cultura. Para reconhecer caracteres ignoráveis na sua comparação, forneça um valor de Ordinal ou OrdinalIgnoreCase para o comparisonType parâmetro.
Ver também
Aplica-se a
Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo)
Compara substrings de dois objetos especificados String , ignorando ou respeitando o seu caso e usando informação específica da cultura para influenciar a comparação, e devolve um inteiro que indica a sua posição relativa na ordem de ordenação.
public:
static int Compare(System::String ^ strA, int indexA, System::String ^ strB, int indexB, int length, bool ignoreCase, System::Globalization::CultureInfo ^ culture);
public static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase, System.Globalization.CultureInfo culture);
static member Compare : string * int * string * int * int * bool * System.Globalization.CultureInfo -> int
Public Shared Function Compare (strA As String, indexA As Integer, strB As String, indexB As Integer, length As Integer, ignoreCase As Boolean, culture As CultureInfo) As Integer
Parâmetros
- strA
- String
A primeira corda a usar na comparação.
- indexA
- Int32
A posição da subcadeia dentro strAde .
- strB
- String
A segunda corda a usar na comparação.
- indexB
- Int32
A posição da subcadeia dentro strBde .
- length
- Int32
O número máximo de caracteres nas substrings a comparar.
- ignoreCase
- Boolean
true ignorar o caso durante a comparação; caso contrário, false.
- culture
- CultureInfo
Um objeto que forneça informação de comparação específica por cultura. Se culture for igual a null, a cultura atual é usada.
Devoluções
Um inteiro que indica a relação lexical entre os dois comparandos.
| Valor | Condição |
|---|---|
| Menos que zero | A subcadeia em strA precede a subcadeia em strB na ordem de ordenação.
|
| Zero | As subcadeias ocorrem na mesma posição na ordem de ordenação, ou length é zero.
|
| Maior que zero | A subcadeia em strA segue a subcadeia em strB na ordem de ordenação.
|
Exceções
indexA é maior do que strA.Length.
-ou-
indexB é maior do que strB.Length.
-ou-
indexA, indexB, ou length é negativo.
-ou-
Ou strA é strBnull, e length é maior que zero.
Exemplos
O exemplo seguinte compara duas subcadeias usando culturas diferentes e ignorando o caso das subcadeadas. A escolha da cultura afeta a forma como a letra "I" é comparada.
// Sample for String.Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo)
using System;
using System.Globalization;
class Sample5
{
public static void Main()
{
// 0123456
String str1 = "MACHINE";
String str2 = "machine";
String str;
int result;
Console.WriteLine();
Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2);
Console.WriteLine("Ignore case, Turkish culture:");
result = String.Compare(str1, 4, str2, 4, 2, true, new CultureInfo("tr-TR"));
str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(4, 2), str1);
Console.Write("{0} ", str);
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(4, 2), str2);
Console.WriteLine();
Console.WriteLine("Ignore case, invariant culture:");
result = String.Compare(str1, 4, str2, 4, 2, true, CultureInfo.InvariantCulture);
str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(4, 2), str1);
Console.Write("{0} ", str);
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(4, 2), str2);
}
}
/*
This example produces the following results:
str1 = 'MACHINE', str2 = 'machine'
Ignore case, Turkish culture:
Substring 'IN' in 'MACHINE' is less than substring 'in' in 'machine'.
Ignore case, invariant culture:
Substring 'IN' in 'MACHINE' is equal to substring 'in' in 'machine'.
*/
// Sample for String.Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo)
open System
open System.Globalization
// 0123456
let str1 = "MACHINE"
let str2 = "machine"
printfn $"\nstr1 = '{str1}', str2 = '{str2}'"
printfn "Ignore case, Turkish culture:"
let result = String.Compare(str1, 4, str2, 4, 2, true, CultureInfo "tr-TR")
let str = if result < 0 then "less than" elif result > 0 then "greater than" else "equal to"
printf $"Substring '{str1.Substring(4, 2)}' in '{str1}' is "
printf $"{str} "
printfn $"substring '{str2.Substring(4, 2)}' in '{str2}'."
printfn "\nIgnore case, invariant culture:"
let result2 = String.Compare(str1, 4, str2, 4, 2, true, CultureInfo.InvariantCulture)
let str3 = if result < 0 then "less than" elif result > 0 then "greater than" else "equal to"
printf $"Substring '{str1.Substring(4, 2)}' in '{str1}' is "
printf $"{str3} "
printfn $"substring '{str2.Substring(4, 2)}' in '{str2}'."
(*
This example produces the following results:
str1 = 'MACHINE', str2 = 'machine'
Ignore case, Turkish culture:
Substring 'IN' in 'MACHINE' is less than substring 'in' in 'machine'.
Ignore case, invariant culture:
Substring 'IN' in 'MACHINE' is equal to substring 'in' in 'machine'.
*)
' Sample for String.Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo)
Imports System.Globalization
Class Sample
Public Shared Sub Main()
' 0123456
Dim str1 As [String] = "MACHINE"
Dim str2 As [String] = "machine"
Dim str As [String]
Dim result As Integer
Console.WriteLine()
Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2)
Console.WriteLine("Ignore case, Turkish culture:")
result = [String].Compare(str1, 4, str2, 4, 2, True, New CultureInfo("tr-TR"))
str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(4, 2), str1)
Console.Write("{0} ", str)
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(4, 2), str2)
Console.WriteLine()
Console.WriteLine("Ignore case, invariant culture:")
result = [String].Compare(str1, 4, str2, 4, 2, True, CultureInfo.InvariantCulture)
str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(4, 2), str1)
Console.Write("{0} ", str)
Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(4, 2), str2)
End Sub
End Class
'
'This example produces the following results:
'
'str1 = 'MACHINE', str2 = 'machine'
'Ignore case, Turkish culture:
'Substring 'IN' in 'MACHINE' is less than substring 'in' in 'machine'.
'
'Ignore case, invariant culture:
'Substring 'IN' in 'MACHINE' is equal to substring 'in' in 'machine'.
'
Observações
As subcadeias a comparar começam em strAindexA, e em strB em indexB. Tanto indexA como indexB são baseados em zero; ou seja, o primeiro carácter em strA e strB está na posição zero, não na posição um. O comprimento da primeira subcorda é igual ao comprimento de strA menos indexA mais um. O comprimento da segunda subcorda é igual ao comprimento de strB menos indexB mais um.
O número de caracteres a comparar é o menor dos comprimentos das duas substrings, e length. Os indexAparâmetros , indexB, e length devem ser não negativos.
A comparação utiliza o culture parâmetro para obter informações específicas de cada cultura, como regras de revestimento e a ordem alfabética dos caracteres individuais. Por exemplo, uma cultura pode especificar que certas combinações de caracteres sejam tratadas como um único carácter, ou que letras maiúsculas e minúsculas sejam comparadas de uma determinada forma, ou que a ordem de ordenação de um carácter depende dos caracteres que o precedem ou seguem.
A comparação é feita usando regras de ordenação de palavras. Para mais informações sobre ordenações de palavra, cadeia e ordinais, veja System.Globalization.CompareOptions.
Um ou ambos os comparandos podem ser null. Por definição, qualquer cadeia, incluindo a cadeia vazia (""), compara-se maior do que uma referência nula; e duas referências nulas comparam-se iguais entre si.
A comparação termina quando uma desigualdade é descoberta ou ambas as subcadeias foram comparadas. No entanto, se as duas cadeias forem iguais ao fim de uma sequência, e a outra cadeia tiver caracteres restantes, então a cadeia com caracteres restantes é considerada maior. O valor de retorno é o resultado da última comparação realizada.
Resultados inesperados podem ocorrer quando as comparações são afetadas por regras de revestimento específicas da cultura. Por exemplo, em turco, o seguinte exemplo produz resultados errados porque o sistema de ficheiros em turco não utiliza regras linguísticas de maiúscula para a letra "i" em "file".
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, true) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
Return True
Else
Return False
End If
End Function
Compare o nome do caminho com "ficheiro" usando uma comparação ordinal. O código correto para isto é o seguinte:
static bool IsFileURI(String path)
{
return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}
let isFileURI path =
String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0
Shared Function IsFileURI(ByVal path As String) As Boolean
If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
Return True
Else
Return False
End If
End Function
Notas para Chamadores
Os conjuntos de caracteres incluem personagens ignoráveis. O Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo) método não considera estes caracteres quando realiza uma comparação linguística ou sensível à cultura. Para reconhecer caracteres ignoráveis na sua comparação, chame o Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) método e forneça um valor de Ordinal ou OrdinalIgnoreCase para o options parâmetro.
Ver também
Aplica-se a
Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions)
Compara substrings de dois objetos especificados String usando as opções de comparação especificadas e informações específicas de cultura para influenciar a comparação, e retorna um inteiro que indica a relação das duas substrings entre si na ordem de ordenação.
public:
static int Compare(System::String ^ strA, int indexA, System::String ^ strB, int indexB, int length, System::Globalization::CultureInfo ^ culture, System::Globalization::CompareOptions options);
public static int Compare(string strA, int indexA, string strB, int indexB, int length, System.Globalization.CultureInfo culture, System.Globalization.CompareOptions options);
static member Compare : string * int * string * int * int * System.Globalization.CultureInfo * System.Globalization.CompareOptions -> int
Public Shared Function Compare (strA As String, indexA As Integer, strB As String, indexB As Integer, length As Integer, culture As CultureInfo, options As CompareOptions) As Integer
Parâmetros
- strA
- String
A primeira corda a usar na comparação.
- indexA
- Int32
A posição inicial da subcadeia dentro strAde .
- strB
- String
A segunda corda a usar na comparação.
- indexB
- Int32
A posição inicial da subcadeia dentro strBde .
- length
- Int32
O número máximo de caracteres nas substrings a comparar.
- culture
- CultureInfo
Um objeto que forneça informação de comparação específica por cultura. Se culture for igual a null, a cultura atual é usada.
- options
- CompareOptions
Opções a usar ao realizar a comparação (como ignorar casos ou símbolos).
Devoluções
Um inteiro que indica a relação lexical entre as duas subcadeias, como mostrado na tabela seguinte.
| Valor | Condição |
|---|---|
| Menos que zero | A subcadeia em strA precede a subcadeia em strB na ordem de ordenação.
|
| Zero | As subcadeias ocorrem na mesma posição na ordem de ordenação, ou length é zero.
|
| Maior que zero | A subcadeia em strA segue a subcadeia em strB na ordem de ordenação.
|
Exceções
options não é um CompareOptions valor.
indexA é maior que strA.Length.
-ou-
indexB é maior que strB.Length.
-ou-
indexA, indexB, ou length é negativo.
-ou-
Ou strA é strBnull, e length é maior que zero.
Exemplos
O exemplo seguinte utiliza o Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) método para comparar os apelidos de duas pessoas. Depois, lista-os por ordem alfabética.
string name1 = "Jack Smith";
string name2 = "John Doe";
// Get position of character after the space character.
int index1 = name1.IndexOf(" ");
index1 = index1 < 0 ? 0 : ++index1;
int index2 = name2.IndexOf(" ");
index2 = index2 < 0 ? 0 : ++index2;
int length = Math.Max(name1.Length, name2.Length);
Console.WriteLine("Sorted alphabetically by last name:");
if (String.Compare(name1, index1, name2, index2, length,
new CultureInfo("en-US"), CompareOptions.IgnoreCase) < 0)
Console.WriteLine("{0}\n{1}", name1, name2);
else
Console.WriteLine("{0}\n{1}", name2, name1);
// The example displays the following output:
// Sorted alphabetically by last name:
// John Doe
// Jack Smith
open System
open System.Globalization
let name1 = "Jack Smith"
let name2 = "John Doe"
// Get position of character after the space character.
let index1 =
let i = name1.IndexOf " "
if i < 0 then 0 else i + 1
let index2 =
let i = name2.IndexOf " "
if i < 0 then 0 else i + 1
let length = max name1.Length name2.Length
printfn "Sorted alphabetically by last name:"
if String.Compare(name1, index1, name2, index2, length, CultureInfo "en-US", CompareOptions.IgnoreCase) < 0 then
printfn $"{name1}\n{name2}"
else
printfn $"{name2}\n{name1}"
// The example displays the following output:
// Sorted alphabetically by last name:
// John Doe
// Jack Smith
Imports System.Globalization
Module Example
Public Sub Main()
Dim name1 As String = "Jack Smith"
Dim name2 = "John Doe"
' Get position of space character.
Dim index1 As Integer = name1.IndexOf(" ")
index1 = CInt(IIf(index1 < 0, 0, index1 - 1))
Dim index2 As Integer = name2.IndexOf(" ")
index1 = CInt(IIf(index1 < 0, 0, index1 - 1))
Dim length As Integer = Math.Max(name1.Length, name2.Length)
Console.WriteLIne("Sorted alphabetically by last name:")
If String.Compare(name1, index1, name2, index2, length, _
New CultureInfo("en-US"), CompareOptions.IgnoreCase) < 0 Then
Console.WriteLine("{0}{1}{2}", name1, vbCrLf, name2)
Else
Console.WriteLine("{0}{1}{2}", name2, vbCrLf, name1)
End If
End Sub
End Module
' The example displays the following output;
' Sorted alphabetically by last name:
' John Doe
' Jack Smith
Observações
As subcadeias a comparar começam em strA na posição indexA e em strB na posição indexB. O comprimento da primeira subcorda é o comprimento de strA menos indexA. O comprimento da segunda subcorda é o comprimento de strB menos indexB.
O número de caracteres a comparar é o menor dos comprimentos das duas substrings, e length. Os indexAparâmetros , indexB, e length devem ser não negativos.
A comparação utiliza o culture parâmetro para obter informação específica da cultura, como regras de revestimento e a ordem alfabética dos caracteres individuais. Por exemplo, uma cultura particular poderia especificar que certas combinações de caracteres fossem tratadas como um único carácter, que os caracteres maiúsculos e minúsculos fossem comparados de uma determinada forma, ou que a ordem de ordem de um carácter dependesse dos caracteres que o precedem ou se seguem.
Atenção
O Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) método foi concebido principalmente para uso em operações de ordenação ou ordenação alfabética. Não deve ser usada quando o propósito principal da chamada de método é determinar se duas substrings são equivalentes (isto é, quando o objetivo da chamada de método é testar um valor de retorno de zero). Para determinar se duas cadeias são equivalentes, chama-se o Equals método.
Um ou ambos de strA e strB podem ser null. Por definição, qualquer cadeia, incluindo String.Empty, compara-se maior do que uma referência nula, e duas referências nulas comparam-se iguais entre si.
A comparação pode ser ainda especificada pelo options parâmetro, que consiste em um ou mais membros da System.Globalization.CompareOptions enumeração. No entanto, como o objetivo deste método é realizar uma comparação de cordas sensível à cultura, os CompareOptions.Ordinal valores e CompareOptions.OrdinalIgnoreCase não têm efeito.
A comparação termina quando uma desigualdade é descoberta ou ambas as subcadeias foram comparadas. No entanto, se as duas cadeias forem iguais ao fim de uma cadeia, e a outra cadeia tiver caracteres restantes, a cadeia com os caracteres restantes é considerada maior. O valor de retorno é o resultado da última comparação realizada.
Notas para Chamadores
Os conjuntos de caracteres incluem personagens ignoráveis. O Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) método não considera estes caracteres quando realiza uma comparação linguística ou sensível à cultura. Para reconhecer caracteres ignoráveis na sua comparação, forneça um valor de Ordinal ou OrdinalIgnoreCase para o options parâmetro.