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

后端 未结 9 1359
没有蜡笔的小新
没有蜡笔的小新 2021-02-02 09:37

I\'m reading a comma-delimited list of strings from a config file. I need to check whether another string is in that list. For example:

\"apple,banana,cheese\"
相关标签:
9条回答
  • 2021-02-02 10:11

    Here's an option that ignores case.

    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);
    
    0 讨论(0)
  • 2021-02-02 10:12

    The answer depends on what the syntax rules for your comma-delimited list are.

    If the rules require that the list be exactly as you posted (no spaces, no trailing comma) then the task can be broken down into it's component pieces:

    Does the string begin with apple,? (String.StartsWith)
    Does the string end with ,apple? (String.EndsWith)
    Does the string contain ,apple,? (String.Contains)

    If the rules are more difficult then the Regex approach becomes the only way without fully processing the list or writing a heap of rules.

    If you are checking for many items against the same string you'll want to just transform the string into a list which you cache and then check against. The String.Split method will do this for you.

    0 讨论(0)
  • 2021-02-02 10:22

    Regex probably doesn't count as "straight-forward", but this is what I've got:

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

    Update: Per Eric's comment below, this should be:

    Regex.IsMatch(listString, "(?<=,|^)" + Regex.Escape(testWord) + "(?=,|$)")
    
    0 讨论(0)
  • 2021-02-02 10:25

    Another way might be to try using

    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

    0 讨论(0)
  • 2021-02-02 10:29
    (","+listString+",").Contains(","+testWord+",");
    

    but not straight-forward, too.

    0 讨论(0)
  • 2021-02-02 10:29
                     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;
        }
    
    0 讨论(0)
提交回复
热议问题