2017-01-02 6 views
5

Я пытаюсь выяснить, как определить, содержит ли строка/не содержит значение списка, а если содержит, но с другим значением.Как проверить, содержит ли строка значение списка и отдельно, если оно содержит, но с другим значением

Если у меня есть входная строка:

string inputString = "it was one"; 

и я хочу найти конкретное значение для условия:

var numbList = new List<string> {"zero", "one", "two"}; 

if (!numbList.Any(inputString.Contains)) 
{ 
    Console.WriteLine("string does not contains list value");           
} 
else 
{ 
    Console.WriteLine("string contains list value"); 
} 

Но не уверен, что это правильный путь, если я хочу знать, и о третьем состоянии , если строка содержит значение, но также содержит другие слова.

Для строки: inputString = "it was one"; желаемый результат должен быть:

Console.WriteLine("string contains list value and other words"); 

строка: inputString = "one";

Console.WriteLine("string contains list value"); 

и: inputString = "it was";

Console.WriteLine("string does not contains list value"); 

ответ

4

Я думаю, что вы ищете что-то вроде это:

if (inputString.Split(new string[]{" "},StringSplitOptions.RemoveEmptyEntries).All(x => numbList.Contains(x))) 
{ 
    opDisplay="string contains list value"; 
} 
else if (numbList.Any(x => inputString.Contains(x))) 
{ 
    opDisplay = "string contains list value and other words"; 
} 
else 
{ 
    opDisplay = "string does not contains list value"; 
} 

Вы можете попробовать пример here

+0

если есть несколько пробелов между каждым словом в 'inputString' то он возвращает еще, если часть. например => ** нуль один два **. удаление лишних может справиться с этим. (Область ввода комментариев SO удаляет лишние уже. Lol) – Badiparmagi

+0

, если они являются дополнительными пробелами между словами, вы можете использовать 'StringSplitOptions.RemoveEmptyEntries', чтобы исключить эти пустые места, см. Обновления в сообщении –

+1

@ un-lucky Здравствуйте, похоже, что это ответ, но не уверен, что если я не использую StringSplitOptions.RemoveEmptyEntries, что это значит, что это «один»? – nikorio

1

почему бы не использовать ниже код? Я не могу думать о одном условии, когда он терпит неудачу.

  string inputString = "it was one "; 
      var numbList = new List<string> { "zero", "one", "two" }; 
      if (numbList.Any(x => inputString.Contains(x))) 
      { 
       if (numbList.Any(x => inputString.Trim().StartsWith(x) && inputString.Trim().EndsWith(x))) 
       { 
        Console.WriteLine("string contains list value"); 
       } 
       else 
       { 
        Console.WriteLine("string contains list value and other words"); 
       } 
      } 
      else 
      { 
       Console.WriteLine("string does not contains list value"); 
      } 

найти скрипку here

+0

привет, оба пути полезны, в некоторых случаях это может быть более подходящим , зависит. В любом случае оба ответа могут быть использованы – nikorio