public static bool MatchesWildcard(this string text, string pattern)
        {
            int it = 0;
              while (text.CharAt(it) != 0 &&
             pattern.CharAt(it) != '*')
              {
            if (pattern.CharAt(it) != text.CharAt(it) && pattern.CharAt(it) != '?')
              return false;
            it++;
              }

              int cp = 0;
              int mp = 0;
              int ip = it;

              while (text.CharAt(it) != 0)
              {
            if (pattern.CharAt(ip) == '*')
            {
              if (pattern.CharAt(++ip) == 0)
            return true;
              mp = ip;
              cp = it + 1;
            }
            else if (pattern.CharAt(ip) == text.CharAt(it) || pattern.CharAt(ip) == '?')
            {
              ip++;
              it++;
            }
            else
            {
              ip = mp;
              it = cp++;
            }
              }

              while (pattern.CharAt(ip) == '*')
              {
            ip++;
              }
              return pattern.CharAt(ip) == 0;
        }
示例#2
0
        public static bool IsParenthesisMatch(this string str)
        {
            if (str.IsNullOrEmpty())
                return true;

            var stack = new Stack<char>();

            for (var i = 0; i < str.Length; i++)
            {
                var c = str.CharAt(i);

                switch (c)
                {
                    case '(':
                        stack.Push(c);
                        break;
                    case '{':
                        stack.Push(c);
                        break;
                    case ')':
                        if (stack.None())
                            return false;
                        if (stack.Peek() == '(')
                            stack.Pop();
                        else
                            return false;
                        break;
                    case '}':
                        if (stack.None())
                            return false;
                        if (stack.Peek() == '{')
                            stack.Pop();
                        else
                            return false;
                        break;
                }
            }
            return stack.None();
        }
 public static bool IsTwoDigitNumber(this string numberString, int max)
 {
     if (numberString.Length == 1)
         return numberString.CharAt(0).IsDigit(max);
     if (numberString.Length != 2)
         return false;
     var highDigit = max / 10;
     var lowDigit = max % 10;
     return numberString.CharAt(0).IsDigit(highDigit) &&
            numberString.CharAt(1).IsDigit(numberString.CharAt(0) == highDigit + 48
                ? lowDigit
                : 10);
 }
 public static int FromTwoDigitString(this string s)
 {
     return s.CharAt(0).FromCoordinateNumberChar() * 10 + s.CharAt(1).FromCoordinateNumberChar();
 }
示例#5
0
        public static CompositeList<string> ParseBrackets(this string @string)
        {
            var result = new CompositeList<string>();

            var stack = new Stack<Tuple<char, string>>();

            var collected = "";

            var currentComposite = result;

            for (var i = 0; i < @string.Length; i++)
            {
                var c = @string.CharAt(i);

                switch (c)
                {
                    case '(':
                        stack.Push(c.Pair(collected));
                        collected = "";
                        var child = new CompositeList<string>();
                        currentComposite.AddChild(child);
                        currentComposite = child;
                        break;
                    case '{':
                        stack.Push(c.Pair(collected));
                        collected = "";
                        var child2 = new CompositeList<string>();
                        currentComposite.AddChild(child2);
                        currentComposite = child2;
                        break;
                    case ')':
                        if (stack.None())
                            return result;
                        if (stack.Peek().Item1 == '(')
                        {
                            currentComposite.Content = collected;
                            collected = stack.Pop().Item2;
                            currentComposite = (CompositeList<string>)currentComposite.Parent;
                        }
                        else
                            return result;
                        break;
                    case '}':
                        if (stack.None())
                            return result;
                        if (stack.Peek().Item1 == '{')
                        {
                            currentComposite.Content = collected;
                            collected = stack.Pop().Item2;
                            currentComposite = (CompositeList<string>)currentComposite.Parent;
                        }
                        else
                            return result;
                        break;
                    default:
                        collected += c;
                        break;
                }
            }
            currentComposite.Content = collected;
            return result;
        }