Как можно в методе IndexOfAny сделать игнорирование регистра?
Да, можно для этого использовать метод просто IndexOf, который принимает StringComparison, можно сделать игнорирование регистра. Но как именно сделать в методе IndexOfAny?
string str = "GuB";
char[]mass = {'U'};
int index = str.IndexOfAny(mass,0,mass.Length) ;
Console.WriteLine(index);
Перегрузок у данного метода для игнорирование регистра нет, информации на просторах интернета нету. Как вообще при переборе массива (сравнении) игнорировать регистр? Прямо в методе IndexOfAny
Ответы (1 шт):
Если в исходной строке и/или массиве искомых символов допускаются символы разных регистров, то следует привести к какому-то одному регистру.
Также следует учесть, что метод String.IndexOfAny(char[] arr, int start, int count) будет проверять count символов в заданной строке, то есть если передать туда размер массива из одного элемента, то ничего не найдется.
Дополнение: При преобразовании в верхний регистр в общем случае (когда могут использоваться некоторые экзотические алфавиты и символы) нужно устанавливать CultureInfo.InvariantCulture либо в текущем потоке выполнения, либо в каждом преобразовании регистра.
Пример 1.
В верхний регистр переводится только строка, в массиве заведомо только прописные буквы:
// для корректной обработки символов некоторых экзотических алфавитов
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
string str = "GuB";
string ups = str.ToUpper();
char[] mass = {'U'};
int index = ups.IndexOfAny(mass);
Console.WriteLine(index); // 1
index = ups.IndexOfAny(mass, 0);
Console.WriteLine(index); // 1
index = ups.IndexOfAny(mass, 0, mass.Length); // длина массива 1, проверить только 1 символ
Console.WriteLine(index); // -1
index = ups.IndexOfAny(mass, 0, str.Length); // проверить всю строку
Console.WriteLine(index); // 1
Пример 2.
В верхний регистр переводятся и строка и массив:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
string str = "ıGuB"; // турецкая ı без точки
string ups = str.ToUpper();
char[] mass = {'U', 'g', 'ı'};
char[] arr = new string(mass).ToUpper().ToCharArray();
int index = ups.IndexOfAny(arr);
Console.WriteLine(index); // 0 -- первым найден символ 'ı'