C#使用Contains判断数字包含关系返回结果异常问题
问题原因
- 直接链式调用
Console.ReadLine().Contains(Console.ReadLine())时,两个Console.ReadLine()会先后触发两次控制台读取,执行逻辑是:等待第一次输入完成回车后,才会执行到第二个ReadLine()等待第二次输入,很容易出现读取顺序和预期不符、读到空值/多余输入的问题,导致判断结果错误。 - 你写的int数组版本逻辑存在本质错误:你创建了长度为10的int数组,仅将第一次输入的完整整数(比如输入5214会被转换为整数值5214)存入数组的第0位,数组剩余9位都是int类型默认值0。此时调用
Contains判断,仅当第二个输入的整数和你存入的完整第一个数相等、或者输入0时才会返回true,完全没有实现“拆分数字位判断是否包含”的逻辑,自然达不到预期效果。
实现方案
如果不需要做额外数值计算,直接用字符串判断是最简单、兼容性最好的方案,支持多位数匹配(比如第一个输入5214、第二个输入21也能正确返回true),注意提前把两次输入存到变量里,不要重复调用ReadLine:
// 读取两次输入,自动去掉首尾多余空格,避免空引用报错 string firstNum = Console.ReadLine()?.Trim() ?? string.Empty; string secondNum = Console.ReadLine()?.Trim() ?? string.Empty; // 直接判断包含关系 Console.WriteLine(firstNum.Contains(secondNum));
如果必须通过数字拆分的方式实现(仅支持第二个输入为单个0-9数字的场景),可以参考以下代码:
int first = Convert.ToInt32(Console.ReadLine()); int second = Convert.ToInt32(Console.ReadLine()); List<int> digitList = new List<int>(); // 处理第一个数为0的特殊情况 if (first == 0) { digitList.Add(0); } else { // 逐位拆分数字 while (first > 0) { digitList.Add(first % 10); first /= 10; } } Console.WriteLine(digitList.Contains(second));
注意:如果输入可能包含首尾空格,一定要在读取后调用
Trim()处理,否则会因为多余字符导致匹配失败。如果需要支持第二个输入为多位数的包含判断,优先选字符串方案,不用额外处理连续数字位的匹配逻辑,代码更简洁不容易出错。
内容的提问来源于stack exchange,提问作者Rabatur
相关产品推荐
相关产品推荐

