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

Unity中Text游戏对象字符串在switch case中匹配失败如何解决

Unity字符串Switch匹配失败解决方案

问题根因

匹配失败基本是由字符串中的不可见字符导致的,常见的包括首尾空格、换行符、制表符、零宽空格,还有可能是撇号被自动转换为了智能全角撇号’,和你手写的半角撇号'不匹配。

处理方案

第一步:字符串标准化清洗

在进入switch判断前,先对answer.text做统一清洗处理,代码如下:

// 字符串清洗逻辑
string cleanedAnswer = answer.text
    .Trim() // 移除首尾常规空白(空格、换行、制表符)
    .Trim('\u200B', '\uFEFF', '\u202E') // 移除常见不可见特殊字符:零宽空格、BOM头、反向控制符
    .Replace('’', '\'') // 将智能全角撇号统一替换为标准半角撇号
    .ToLowerInvariant(); // 若无需区分大小写可保留此行,否则删除

switch (cleanedAnswer)
{            
    case "it's a potato":
        points++;
        break;
    // 其他答案的case逻辑
}

第二步:异常排查方法

如果清洗后还是匹配失败,可以通过字符级比对快速定位差异:

string standardStr = "it's a potato";
string rawAnswer = answer.text;

// 先比对长度,长度不一致肯定有隐藏字符
Debug.Log($"标准字符串长度:{standardStr.Length},实际字符串长度:{rawAnswer.Length}");

// 逐字符输出ASCII码对比
for (int i = 0; i < Mathf.Max(standardStr.Length, rawAnswer.Length); i++)
{
    char sChar = i < standardStr.Length ? standardStr[i] : ' ';
    char rChar = i < rawAnswer.Length ? rawAnswer[i] : ' ';
    Debug.Log($"索引{i}:标准字符【{sChar}】ASCII={(int)sChar},实际字符【{rChar}】ASCII={(int)rChar}");
}

输出后对比每个位置的ASCII码,就能直接找到差异字符,针对性加替换逻辑即可。


内容的提问来源于stack exchange,提问作者adrian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:54:02