C#字符串排序问题:Contains方法为何未按预期触发?
问题原因及修复方案
你的代码核心问题是遍历单词的同时就递增了目标数字,导致数字和要找的单词完全错位:
- 第一次循环处理单词
is2时,你找的是"1",不匹配,然后lookingForNum变成2; - 第二次处理
Thi1s时,你找的是"2",但这个单词里是"1",自然匹配不上; - 后续循环依次找3、4,对应处理的单词却根本不含这些数字,最终完全找不到正确内容。
修复后的基础写法
string testA = "is2 Thi1s T4est 3a"; //--> "Thi1s is2 3a T4est" string[] arrayTestA = testA.Split(' '); string finalString = string.Empty; int lookingForNum = 1; // 按顺序找1到数组长度的每个数字 while (lookingForNum <= arrayTestA.Length) { string targetNum = lookingForNum.ToString(); // 遍历整个数组找包含当前数字的单词 foreach (string word in arrayTestA) { if (word.Contains(targetNum)) { finalString += $"{word} "; break; // 题目保证每个数字对应唯一单词,找到即跳出 } } lookingForNum++; } // 去掉最后多余的空格 finalString = finalString.Trim(); Console.WriteLine(finalString);
更简洁的LINQ写法
如果熟悉LINQ,可以用更紧凑的逻辑实现:
string testA = "is2 Thi1s T4est 3a"; string result = string.Join(" ", testA.Split(' ') .OrderBy(word => word.First(char.IsDigit))); Console.WriteLine(result);
这里通过First(char.IsDigit)提取每个单词里的数字字符,再按该数字排序,最后拼接成目标字符串。
内容的提问来源于stack exchange,提问作者Greg Meff
相关产品推荐
相关产品推荐

