How to use string.Endswith to test for multiple endings?

前端 未结 9 2439
死守一世寂寞
死守一世寂寞 2020-12-08 21:17

I need to check in string.Endswith(\"\") from any of the following operators: +,-,*,/

If I have 20 operators I don\'t want to use ||<

相关标签:
9条回答
  • 2020-12-08 21:34

    Test the last char of the string using String.IndexOfAny(Char[], Int32) method (assuming str is your variable):

    str.IndexOfAny(new char[] {'+', '-', '*', '/'}, str.Length - 1)
    

    Complete expression:

    str.Lenght > 0 ? str.IndexOfAny(new char[] {'+', '-', '*', '/'}, str.Length - 1) != -1 : false
    
    0 讨论(0)
  • 2020-12-08 21:39

    Given the complete lack of context, would this solution that is worse than using an easy || operator be of use:

    Boolean check = false;
    if (myString.EndsWith("+"))
         check = true;
    
    if (!check && myString.EndsWith("-"))
         check = true;
    
    if (!check && myString.EndsWith("/"))
         check = true;
    
    etc.
    
    0 讨论(0)
  • 2020-12-08 21:40
    string s = "Hello World +";
    string endChars = "+-*/";
    

    Using a function:

    private bool EndsWithAny(string s, params char[] chars)
    {
        foreach (char c in chars)
        {
            if (s.EndsWith(c.ToString()))
                return true;
        }
        return false;
    }
    
    bool endsWithAny = EndsWithAny(s, endChars.ToCharArray()); //use an array
    bool endsWithAny = EndsWithAny(s, '*', '/', '+', '-');     //or this syntax
    

    Using LINQ:

    bool endsWithAny = endChars.Contains(s.Last());
    

    Using TrimEnd:

    bool endsWithAny = s.TrimEnd(endChars.ToCharArray()).Length < s.Length;
    // als possible s.TrimEnd(endChars.ToCharArray()) != s;
    
    0 讨论(0)
  • 2020-12-08 21:43

    If you are using .NET 3.5 (and above) then it is quite easy with LINQ:

    string test = "foo+";
    string[] operators = { "+", "-", "*", "/" };
    bool result = operators.Any(x => test.EndsWith(x));
    
    0 讨论(0)
  • 2020-12-08 21:49

    Although a simple example like that is probably good enough using ||, you can also use Regex for it:

    if (Regex.IsMatch(mystring, @"[-+*/]$")) {
      ...
    }
    
    0 讨论(0)
  • 2020-12-08 21:52

    Is a regex expression not an option

    0 讨论(0)
提交回复
热议问题