检查字符串是否包含多个字母

时间:2014-02-11 15:59:58

标签: c#

我有一个名为dictionaryWords的对象的集合。

对于此集合中的每个单词,我需要检查它是否包含某些字母。如果它确实包含一个或多个某个字母,则会将其从集合中删除。

示例:

Collection before removal: ['abc','dee',fff']
letters to check for: e,f
Collection after removal: ['abc']

而不是指定多个字母是否有办法检查数组?

我的代码:

foreach(DictionaryWord word in dictionaryWords)
{
    if (!word.Contains("D") && !word.Contains("E") // optimize this line
    {
        // Word does not contain letters, word is good
    }
}

如何更换“优化此行”以说“如果word包含来自值数组的任何字母”

谢谢, 安德鲁

6 个答案:

答案 0 :(得分:3)

尝试这样的事情:

// isolate the letters
string[] letters = new string[] { "D", "E", "F" }; // other strings or letters

// interate between your data
foreach(DictionaryWord word in dictionaryWords)
{
    // check if the work does not contain any letter
    if (!letters.Any(x => word.Contains(x))
    {
        // Word does not contain letters, word is good
    }
}

答案 1 :(得分:1)

为什么不将它抽象出函数?

void CheckForLetters(IEnumerable<DictionaryWord> source, IEnumerable<char> letters) {
  foreach (var word in source) { 
    if (letters.any(c => word.Contains(c)) { 
      // It has the letter
    }
  }
}

答案 2 :(得分:0)

创建一个接受要比较的字符数组的方法。

原型如下所示:bool isLetterInWord(DictionaryWord word, char[] letters);

答案 3 :(得分:0)

假设您可以将DictionaryWord类映射到字符串,可以使用Linq查询:

var words = new string[] { "abc", "def", "fe" };
var lettersToExclude = new char[] { 'e', 'f' };
var goodWords = from x in words where !lettersToExclude.Intersect(x).Any() select x;

答案 4 :(得分:0)

使用HashSets并使用IsSubsetOf方法

http://msdn.microsoft.com/en-us/library/bb358446(v=vs.110).aspx

 string str = "teststing";

 var strset = new HashSet<char>(str.ToCharArray());
 var charstoCheck = new HashSet<char>(new Char[] {'z'});
 bool isstrcontainschars = charstoCheck.IsSubsetOf(strset);

答案 5 :(得分:0)

您可以使用Regex

string value = "abcdef";
var result = new Regex("[d-e-f]").Replace(value, string.Empty);

它检查字符串是否包含Regex构造函数中的字母,并替换所需字母。在我的示例中,我将该字母替换为string.Empty

在你的情况下,你可以这样做:

if (new Regex("[d-e-f]").IsMatch(word))
{
    //Do something.
}