使用.NET检查逗号分隔列表中字符串的最佳方法?

时间:2010-04-06 16:44:30

标签: c# .net

我正在从配置文件中读取逗号分隔的字符串列表。我需要检查该列表中是否有另一个字符串。例如:

"apple,banana,cheese"

如果我检查"apple"我应该找到它,但如果我检查"app"我不应该。

最直接,最简洁的方法是什么?它不一定很快。

(我会将我的解决方案添加为答案,但我希望有人能做得更好。)

9 个答案:

答案 0 :(得分:44)

使用linq:

listString.Split(',').Contains("apple")

W / o linq:

Array.IndexOf(listString.Split(','), "apple") >= 0

答案 1 :(得分:11)

(","+listString+",").Contains(","+testWord+",");

但也不是直截了当。

答案 2 :(得分:7)

正则表达式可能并不算“直截了当”,但这就是我所拥有的:

Regex.IsMatch(listString, "(?<=,|^)" + testWord + "(?=,|$)")

更新:根据Eric的评论,这应该是:

Regex.IsMatch(listString, "(?<=,|^)" + Regex.Escape(testWord) + "(?=,|$)")

答案 3 :(得分:3)

另一种方法可能是尝试使用

bool contains = new List<string>("apple,banana,cheese".Split(',')).Contains("apple");
//or
bool b = "apple,banana,cheese".Split(',').Contains("apple");

List< T>.Contains Method

String.Split Method

Enumerable.Contains Method

答案 4 :(得分:2)

这样可行,但如果它们变得复杂,则正则表达式相当慢。也就是说,单词边界锚点使这类事情变得非常容易。

var foods = "apple,banana,cheese";

var match = Regex.Match(foods, @"\bapple\b");

if (match.Success)
    Console.WriteLine(match.Value);

答案 5 :(得分:1)

这是一个忽略大小写的选项。

var food = "apple,banana,cheese";

bool containsApp = food.Split(',')
                       .Where(s => string.Compare("app", s, true) == 0)
                       .Count() > 0;

bool containsApple = food.Split(',')
                         .Where(s => string.Compare("apple", s, true) == 0)
                         .Count() > 0;

Console.WriteLine("Contains \"app\"? {0}", containsApp);
Console.WriteLine("Contains \"apple\"? {0}", containsApple);

答案 6 :(得分:1)

答案取决于逗号分隔列表的语法规则。

如果规则要求列表与您发布的完全一样(没有空格,没有尾随逗号),那么任务可以分解为它的组成部分:

字符串是否以apple,开头? (String.StartsWith)
字符串是否以,apple结尾? (String.EndsWith)
字符串是否包含,apple,? (String.Contains)

如果规则更加困难,那么正则表达式方法将成为没有完全处理列表或编写规则堆的唯一方法。

如果要针对相同的字符串检查多个项目,则只需将字符串转换为缓存的列表,然后进行检查。 String.Split方法将为您完成此任务。

答案 7 :(得分:0)

这是忽略案例和文化的解决方案(或选择StringComparer的属性之一)

var commaDelimitedString = "string1,string2,string3,string4";
var testString = string2.trim; // trim to remove the spaces coz you may be getting it from UI
if(commaDelimitedString.split(',').contains(testString,StringComparer.InvariantCultureIgnoreCase))
{
     //TODO: What to do when condition is true
}
else
{
     //TODO: What to do when condition is false
}

答案 8 :(得分:0)

                 public bool GetIsExistSubstring(string mainstring, string substring)
    {        
        bool Isexist=false;
        int i = -1;
        mainstring = string.Format(",{0},", mainstring);//so it will be like  ,1,2,3,
        substring = string.Format(",{0},", substring);//so it will be like  ,1,
        i=mainstring.IndexOf(substring);

        if(i!=-1)
        {
            Isexist = true;
        }
        return Isexist;
    }