Su aplicación puede utilizar el método IndexOf()()() sobrecargado para recuperar el índice con base cero de un carácter o subcadena dentro de una cadena especificada. Este método recupera un número entero negativo si el carácter o subcadena no se encuentra en la cadena especificada. Cuando se busca un carácter determinado mediante CompareInfo.IndexOf, la aplicación debe tener en cuenta que las sobrecargas del método que aceptan el parámetro CompareOptions realizan la comparación de forma diferente que las sobrecargas del método que no aceptan este parámetro. Las sobrecargas del método que buscan un tipo de caracteres y no toman un parámetro CompareOptions, realizan una búsqueda que tiene en cuenta la referencia cultural. Esto significa que si un valor Unicode representa un carácter compuesto, como la ligadura 'Æ' (\u00C6), puede ser considerada equivalente a cualquier aparición de sus componentes en la secuencia correcta, como "AE" (\u0041\u0045), en función de la referencia cultural. Para realizar una búsqueda ordinal (sin tener en cuenta la referencia cultural) en la que un tipo de caracteres se considere equivalente a otro tipo de caracteres sólo si los valores Unicode son los mismos, la aplicación debe utilizar una de las sobrecargas de CompareInfo.IndexOf, que toma un parámetro CompareOptions, y establecer el parámetro en el valor Ordinal.
Las aplicaciones también pueden utilizar las sobrecargas del método IndexOf()()(), que buscan un carácter para realizar una búsqueda ordinal (sin tener en cuenta la referencia cultural). Tenga presente que las sobrecargas de este método que buscan una cadena realizan una búsqueda que tiene en cuenta la referencia cultural.
En el ejemplo de código siguiente se ilustra la diferencia entre los resultados recuperados por el método IndexOf en función de la referencia cultural. Se crea un objeto CultureInfo para danés (Dinamarca), designado como "da-DK". A continuación, se utilizan las sobrecargas del método CompareInfo.IndexOf para buscar el carácter "Æ" en las cadenas "Æble" y "aeble". Tenga en cuenta que, para la referencia cultural "da-DK", el método CompareInfo.IndexOf que toma un parámetro CompareOptions establecido en Ordinal, y el mismo método sin tomar este parámetro recuperan lo mismo. El carácter "Æ" sólo se considera equivalente al valor del código Unicode \u00E6.
Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic
Public Class CompareClass
Public Shared Sub Main()
Dim str1 As String = "Æble"
Dim str2 As String = "aeble"
Dim find As Char = "Æ"
' Creates a CultureInfo for Danish in Denmark.
Dim ci As New CultureInfo("da-DK")
Dim result1 As Integer = ci.CompareInfo.IndexOf(str1, find)
Dim result2 As Integer = ci.CompareInfo.IndexOf(str2, find)
Dim result3 As Integer = ci.CompareInfo.IndexOf(str1, find, _
CompareOptions.Ordinal)
Dim result4 As Integer = ci.CompareInfo.IndexOf(str2, find, _
CompareOptions.Ordinal)
Console.WriteLine(ControlChars.Newline + "CultureInfo is set to _
{0}", ci.DisplayName)
Console.WriteLine(ControlChars.Newline + "Using _
CompareInfo.IndexOf(string, char) method" + _
ControlChars.Newline + " the result of searching for {0} in the _
string {1} is: {2}", find, str1, result1)
Console.WriteLine(ControlChars.Newline + "Using _
CompareInfo.IndexOf(string, char) method" + _
ControlChars.Newline + " the result of searching for {0} in the _
string {1} is: {2}", find, str2, result2)
Console.WriteLine(ControlChars.Newline + "Using _
CompareInfo.IndexOf(string, char, CompareOptions) method" + _
ControlChars.Newline + " the result of searching for {0} in the _
string {1} is: {2}", find, str1, result3)
Console.WriteLine(ControlChars.Newline + "Using _
CompareInfo.IndexOf(string, char, CompareOptions) method" + _
ControlChars.Newline + " the result of searching for {0} in the _
string {1} is: {2}", find, str2, result4)
End Sub
End Class
using System;
using System.Globalization;
using System.Threading;
public class CompareClass
{
public static void Main()
{
string str1 = "Æble";
string str2 = "aeble";
char find = 'Æ';
// Creates a CultureInfo for Danish in Denmark.
CultureInfo ci= new CultureInfo("da-DK");
int result1 = ci.CompareInfo.IndexOf(str1, find);
int result2 = ci.CompareInfo.IndexOf(str2, find);
int result3 = ci.CompareInfo.IndexOf(str1, find,
CompareOptions.Ordinal);
int result4 = ci.CompareInfo.IndexOf(str2, find,
CompareOptions.Ordinal);
Console.WriteLine("\nCultureInfo is set to {0} ", ci.DisplayName);
Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char)
method\nthe result of searching for {0} in the string {1} is:
{2}", find, str1, result1);
Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char)
method\nthe result of searching for {0} in the string {1} is:
{2}", find, str2, result2);
Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char,
CompareOptions) method\nthe result of searching for {0} in the
string {1} is: {2}", find, str1, result3);
Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char,
CompareOptions) method\nthe result of searching for {0} in the
string {1} is: {2}", find, str2, result4);
}
}
Este código genera el resultado siguiente:
CultureInfo is set to Danish (Denmark)
Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string Æble is: 0
Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string aeble is: -1
Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string Æble is: 0
Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string aeble is: -1
Si su aplicación reemplaza CultureInfo ci = new CultureInfo ("da-DK") por CultureInfo ci = new CultureInfo ("en-US"), el método IndexOf()()() cuyo parámetro CompareOptions está establecido en Ordinal y el mismo método sin este parámetro recuperarán resultados diferentes. La comparación que tiene en cuenta la referencia cultural realizada por el método IndexOf evalúa el carácter 'Æ' como equivalente a sus componentes "ae". La comparación ordinal (que no tiene en cuenta la referencia cultural) realizada por el método IndexOf no recupera el carácter "Æ" equivalente a "ae" porque los valores de código Unicode no coinciden.
Al volver a compilar y ejecutar el código para la referencia cultural inglés (Estados Unidos), "en-US", se genera el resultado siguiente:
The CurrentCulture property is set to English (United States)
Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string Æble is: 0
Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string aeble is: 0
Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string Æble is: 0
Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string aeble is: -1