在Unity3d中实现亵渎性语言过滤器时无法比较字符串

jdg4fx2g  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(95)

我在Unity中为我的玩家用户名实现了一个简单的脏话过滤器。但是由于某些原因,我没有得到正确的结果。如下面的代码所示,我从TextAsset.txt文件中提取单词到一个字符串列表中,并使用Contains()函数循环检查用户名是否包含一个坏词。但是Contains()函数总是返回false。我还尝试了什么:
1.已尝试“==”运算符来测试字符串是否准确,但仍返回false
1.已尝试Equals()函数测试字符串是否准确,但仍返回false
1.已尝试regex,但仍无法正常工作注意:checkText和badWordToUpper都是字符串类型,并且显示了正确的结果。但是在比较时,不起作用。

kmbjn2e3

kmbjn2e31#

听起来像是一个坏单词中隐藏了一个白色字符。如果您使用的是Windows,则中断行为"\r\n"。您可以使用以下命令进行检查:

void Start()
{
    strBlockList = ...;
    var wordWithWhiteChar = strBlockList.Where(w => w.Any(c => char.IsWhiteSpace(c))).ToList();
    // Check wordWithWhiteChar
}

如果是这样,你需要清理每个单词,比如:

void Start()
{
    strBlockList = ...;
    for (int i = 0; i < strBlockList.Length ; i++)
    {
        strBlockList[i] = Regex.Replace(strBlockList[i], @"\s+", string.Empty).ToUpper();
    }
}

额外好处:在Start中转换为大写以缓存操作。

相关问题