You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:20:42