есть ли такая вещь, как IndexOf (любой белый символ, startIndex)? - PullRequest
0 голосов
/ 29 мая 2019

Символ пробела - это один пробел, табуляция, возврат и новая строка.Чтобы обнаружить их, используйте это регулярное выражение: \ s

Мой вопрос таков: могу ли я использовать один оператор IndexOf, который будет возвращать индекс любого символа пробела?

//works
int index = richTextBox1.Text.IndexOf(' ', 0);
int index = richTextBox1.Text.IndexOf('\n', 0);

//doesn't work
int index = richTextBox1.Text.IndexOf('\\s', 0);
int index = richTextBox1.Text.IndexOf("\\s", 0);

'\ S' вызывает ошибку из-за слишком большого количества символов, в то время как "\ s" в конечном итоге ищет \ s в строке, просто ищет "в" небесах ".Я не против проверить каждый тип, но если есть лучший способ, пожалуйста, дайте мне знать.Спасибо.

1 Ответ

2 голосов
/ 29 мая 2019

string.IndexOfAny(char[]) даст вам индекс строки, где появляется первый символ любого из символов в массиве.

Хитрость в том, чтобы определить, что такое «пробел».В приведенном ниже примере 25 символов определены как пробелы, наиболее распространенными являются ' ', '\n', '\t', '\v', '\r'.Следующее будет использовать определения юникода и char.IsWhitespace, чтобы определить, какие есть пробельные символы.

public static void Main()
{
    var wsChars = Enumerable.Range(0, ushort.MaxValue)
                            .Where(c => char.IsWhiteSpace(Convert.ToChar(c)))
                            .Select(c => Convert.ToChar(c)).ToArray();

    Console.WriteLine(wsChars.Length);

    var someText = "This_is_a\tstring with \nsome whitespace characters.";

    Console.WriteLine(someText.IndexOfAny(wsChars));
}

Попробуйте это на .NET Fiddle

Если вы хотитечтобы начать с определенного индекса, просто используйте string.IndexOfAny(char[], int) для предоставления начального индекса.

...