如何查找字符串中多个字符的首次出现并简化现有C#实现代码
解决方案
你原有代码存在逻辑漏洞:IndexOf 方法在找不到对应字符时会返回 -1,如果目标字符串中仅存在两个字符中的一个,原有判断会得到错误结果。
C# 内置的 string.IndexOfAny 方法完全匹配你的需求,该方法支持传入字符数组,返回第一个匹配到的字符的索引,还天然支持后续扩展更多判断字符:
string userInput = Console.ReadLine(); char[] targetChars = { '+', '-' }; int matchIndex = userInput.IndexOfAny(targetChars); // 若两个字符都不存在,可根据业务需求调整默认返回值 char firstFound = matchIndex >= 0 ? userInput[matchIndex] : '\0';
如果仅需要判断固定两个字符,也可以用更简短的元组模式匹配写法:
char firstFound = (userInput.IndexOf('+'), userInput.IndexOf('-')) switch { (< 0, < 0) => '\0', // 两个字符都不存在的场景 (>= 0, < 0) => '+', (< 0, >= 0) => '-', (var i1, var i2) => i1 < i2 ? '+' : '-' };
方案对比
IndexOfAny方案可读性、扩展性最优,后续新增判断字符仅需要修改targetChars数组即可,不需要调整逻辑,优先推荐使用- 元组模式匹配的写法适合固定两个判断字符的场景,无需额外声明数组,代码更紧凑
内容的提问来源于stack exchange,提问作者Bobbyman5506
相关产品推荐
相关产品推荐

