CHAR类型包含判断无法用Contains方法、非规范电话号码格式化问题咨询
问题1:Char类型数组包含匹配实现(无可用Contains方法场景)
可根据数组大小选择两种实现方案:
- 方案1:哈希集快速匹配(适合大数组场景,时间复杂度更低)
思路:先将Array1的所有char元素存入哈希集合,再遍历Array2的元素逐个判断是否在集合中,只要存在至少一个匹配即满足条件。
代码示例(C#):bool HasCommonChar(char[] array1, char[] array2) { HashSet<char> charSet = new HashSet<char>(array1); foreach (char c in array2) { if (charSet.Contains(c)) { return true; } } return false; } - 方案2:双层遍历暴力匹配(适合小数组场景,无需额外引入数据结构)
思路:直接逐个比对两个数组的元素,匹配到相同字符即可返回结果。
代码示例:bool HasCommonChar(char[] array1, char[] array2) { foreach (char a in array1) { foreach (char b in array2) { if (a == b) return true; } } return false; }
问题2:非规范电话号码格式化实现
核心思路:仅保留电话号码中的+前缀和所有数字字符,过滤空格、括号、横杠等所有无关字符即可得到规范格式。
- 正则替换实现(代码更简洁):
输入string FormatPhoneNumber(string input) { // 匹配所有不是+和数字的字符,统一替换为空 return System.Text.RegularExpressions.Regex.Replace(input, @"[^+0-9]", ""); }+ 420 741-854()642调用该方法,直接输出+420741854642,完全符合预期。 - 字符遍历筛选实现(无正则依赖场景):
string FormatPhoneNumber(string input) { StringBuilder sb = new StringBuilder(); foreach (char c in input) { if (c == '+' || char.IsDigit(c)) { sb.Append(c); } } return sb.ToString(); }
内容的提问来源于stack exchange,提问作者Martin Strnad
相关产品推荐
相关产品推荐

