#c#
#c#
Вопрос:
Допустим, я получаю следующий вопрос
Консоль.WriteLine («Какие команды сталкивались друг с другом? — используйте формат Red vs Blue»);
Тогда мой ответ на вопрос выше будет состоять из двух команд. Но как их можно прочитать как два отдельных? Так что я читаю только [Красный] [синий], но часть «vs» между ними должна быть там.
Я надеюсь, что вы поняли, что я пытаюсь сказать. Мой английский не очень хорош.
с наилучшими пожеланиями,
ps, как вы можете сказать, я довольно новичок в программировании.
редактировать: о, и это все на C#
Комментарии:
1. Вам всегда будет нужно значение перед ‘vs’ и сразу после ‘vs’?
2. О, мне нужны оба. А затем разделить на две строки.
Ответ №1:
Вы можете использовать String.Split()
:
var answers = userInput.Split(new String[] { "vs" }, StringSplitOptions.RemoveEmptyEntries);
if (answers.Length == 2) {
var red = answers[0];
var blue = answers[1];
}
Комментарии:
1. надеюсь, что это всегда vs, а не VS
2. В приведенном выше коде var red = «Какие команды сталкивались друг с другом? — использовать » и var blue = «Синий формат»
3. Я думаю, вы интерпретируете текст «использовать формат Red vs Blue» как формат ответа пользователя. Для меня это учебное пособие — т. Е., пожалуйста, используйте формат «КРАСНЫЙ против СИНЕГО» при предоставлении вашего ответа. На которые пользователь мог бы ввести: RedTeam1 против BlueTeam5.
4. @V4Vendetta — Хороший улов,
String.Split()
чувствителен к регистру, поэтому любой вариант «vs» потребует специальной обработки: Vs, VS, vS. Они могли бы просто быть включены в инициализатор массива.5. О, спасибо за это, буду иметь это в виду. Я добавлю это в вопрос, чтобы пользователь не сделал это неправильно. И чтобы мне не пришлось больше работать.
Ответ №2:
Есть много вариантов, вы можете использовать функцию разделения, чтобы сделать ее массивом и удалить «vs» или просто использовать строку.Функция Replace(«vs»,»») для замены строки «vs» пустым значением.
Ответ №3:
Вы можете попробовать использовать регулярное выражение:
Match m = Regex.Match("^(?<team1>. ) vs (?<team2>. )$", userInput);
if (m.Success)
{
string team1 = m.Groups["team1"].Value;
string team2 = m.Groups["team2"].Value;
}
Пожалуйста, обратите внимание, что это может быть не на 100% синтаксически корректно — вам нужно немного обратиться к IntelliSense — например, я не уверен, является ли шаблон первым или вторым параметром в Match
, но я уверен, что вы поняли картину.
Комментарии:
1. Небольшой вопрос — Это (?<team1>. ) является ли это чем-то стандартным? Со всеми вопросительными знаками. А также, если я заглавлю «T», означает ли это, что принимаются только заглавные слова. Это не то, что вам нужно выяснить, если вы не знаете — просто я не в том месте, где я могу это проверить.
2. Извините, я не смог прочитать, что вы новичок в C # 🙂 Эта
(?<team1>...)
вещь формирует «именованную группу» в регулярном выражении. Скобка создает группу, к которой вы обычно можете получить доступ только по индексу.?<xyz>
Присваивает группе имена, поэтому вы можете использовать имя для доступа к значению группы, что проще, если у вас есть вложенные группы.team1
иteam2
являются абсолютно произвольными (но уникальными) именами — они не оказывают никакого влияния на то, как вычисляется регулярное выражение..
Это важно. Там написано: «по крайней мере, один символ».3. Что означает регулярное выражение: «Найдите все до и после текста » vs » и назовите первую часть «team1», а вторую часть «team2″, чтобы позже мы могли получить совпадающие значения по имени».
4. О, большое вам спасибо за это объяснение. Это действительно ясно для меня. Я думаю, что могу использовать этот код для своего проекта. Я надеюсь, что смогу продолжить свою работу, когда вернусь домой. На самом деле я собираюсь опробовать их все в учебных целях.
Ответ №4:
Вы можете прочитать все как одну строку, затем разделить с помощью разделителя «vs», тогда вы получите таблицу из 2 строк, которые вам нужны
Ответ №5:
Используйте строку.Разделить функцию, как предлагали другие. Это разделит вашу строку на массив строк. Затем определите, какая строка в массиве является строкой ‘vs’. Возьмите значение индекса до ‘vs’ и после ‘vs’. Например:
string input = "Which teams have faced eachother? - use Red vs Blue format";
string[] inputArray = input.Split( ' ' );
int vsLocation = 0;
for ( int i = 0; i < inputArray.Length; i ) {
if ( inputArray[i] == "vs" ) {
vsLocation = i;
break;
}
}
if ( vsLocation > 0) {
string team1 = inputArray[vsLocation - 1];
string team2 = inputArray[vsLocation 1];
}
Комментарии:
1. Чтобы уточнить, при использовании
String.Split()
элемент separator не отображается в результатах, на которые вы ссылались в своем ответе.2. Мне просто понадобилась минута, чтобы написать код самому. Основываясь на вашем ответе выше, вы правы. Однако я использую пробел в качестве разделителя.
3. не должен ли if (inputArray [i] == «vs») { быть похожим на «vs», чтобы пробелы также исчезли
4. Нет. Строка будет разделена на основе пробелов, поэтому сами пробелы не будут включены.
5. Заметил пару ошибок и в моей первоначальной редакции. Вот рабочий пример.