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