繁体   English   中英

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

[英]Best way to check for string in comma-delimited list with .NET?

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

"apple,banana,cheese"

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

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

(我会添加我的解决方案作为答案,但我希望有人有更好的东西。)

使用linq:

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

没有linq:

Array.IndexOf(listString.Split(','), "apple") >= 0
(","+listString+",").Contains(","+testWord+",");

但也不是直截了当的。

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

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

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

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

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

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

List <T> .Contains方法

String.Split方法

Enumerable.Contains方法

这有效,但如果它们变得复杂,则正则表达式相当慢。 也就是说,单词边界锚点使这种事情变得非常简单。

var foods = "apple,banana,cheese";

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

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

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

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);

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

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

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

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

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

这是忽略大小写和文化的解决方案(或者选择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
}
                 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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM