Пробельный символ — это один пробел, табуляция, возврат и новая строка. Чтобы обнаружить их, используйте это регулярное выражение: \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 в строке, просто ища в "небесах". Я не против проверить каждый тип, но если есть лучший способ, пожалуйста, дайте мне знать. Спасибо.
Вы можете использовать string.IndexOfAny(char[])
с массивом символов возможных пробелов.
Я как раз публиковал ответ, когда он закрылся, но вот, можешь попробовать на DotNetFiddle.
Извините, TaW и Camilo, но меня интересует именно IndexOf, поэтому я не уверен, почему я потерял очко. Я искал ответы/темы IndexOf. Так что спасибо @RonBeyer за ответ. Я проверю это прямо сейчас
С char[] whites = { ' ', '\t', '\v' };
вы можете использовать это вместо IndexOf: var index = hay.Split(whites )[0].Length;
или предложения Рона IndexOfAny
.
@TaW, если можешь, отредактируй заголовок. должен был быть IndexOf (любой белый символ, индекс), потому что это то, что я действительно искал. Таким образом, это не дублирующий вопрос, а -1 за неправильное написание. в любом случае, ваш ответ вместе с ответом Рона помог еще раз спасибо
Вы можете использовать StartIndex напрямую с IndexOfAny. Для разделенного решения вам нужно использовать `hay.Substring(StartIndex).Split(...`.
@ Рон, я думаю, ты должен добавить комментарий в качестве ответа.
@TaW Спасибо, так как вопрос был открыт повторно, я мог закончить ответ, который начал.
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));
}
Если вы хотите начать с определенного индекса, просто используйте string.IndexOfAny(char[], int)
, чтобы указать начальный индекс.