Как найти первый экземпляр более 1 символа(ов) в строке

#c# #string

#c# #строка

Вопрос:

Я ищу, есть ли лучший способ выяснить, какой из двух символов появляется первым в строке.

мой текущий код для этого таков

 string UserInput = Console.Readline; char FirstFound;  if (UserInput.IndexOf(' ') gt; UserInput.IndexOf('-') ) {  FirstFound = ' '; } else {  FirstFound = '-'; }  

Есть ли метод, который допускает более 1 ввода, чтобы упростить это? Или что-нибудь еще, чтобы сделать это короче?

Комментарии:

1. Короче, чем это, нет. Но если у вас больше символов, вы можете перебирать символ за символом

2. Говоря «более 1 ввода», вы имеете в виду, что у вас их более одного UserInput ?

3. @PranavHosangadi нет, я спрашивал, есть ли какой-либо способ найти индекс первого экземпляра 2 или более элементов в строке.

Ответ №1:

Вы можете немного сократить его, поняв, что код фактически содержит - символ в качестве значения по умолчанию, потому что это результат else блока. Имея это в виду, мы можем сделать это, чтобы удалить else блок:

 string UserInput = Console.Readline(); char FirstFound = '-';  if (UserInput.IndexOf(' ') gt; UserInput.IndexOf('-') ) {  FirstFound = ' '; }  

Мы также могли бы сделать это, что не короче, но будет работать лучше:

 string UserInput = Console.ReadLine(); char FirstFound; foreach(char c in UserInput) {  if (c == ' ' || c == '-')  {  FirstFound = c;  break;  } }  

Который мы можем сократить, чтобы использовать метод linq FirstOrDefault() :

 string UserInput = Console.ReadLine(); char FirstFound = UserInput.FirstOrDefault(c =gt; "- ".Contains(c));  

Если вы хотите расширить это, чтобы разрешить более двух целей поиска, вы можете добавить цели в строку следующим образом, без дополнительных строк кода:

 string UserInput = Console.ReadLine(); char FirstFound = UserInput.FirstOrDefault(c =gt; "- */x÷".Contains(c));  

Комментарии:

1. Альтернативная версия: char FirstFound = UserInput.FirstOrDefault(c =gt; "- ".Contains(c));

2. О, мне это нравится. Не возражаете, если я украду его здесь?

3. Действуйте, сэр! Я поместил это в качестве комментария в ваш ответ. 😉