需要一种更好的方法来删除字符串中的模式

本文关键字:方法 删除 字符串 模式 更好 一种 | 更新日期: 2023-09-27 17:50:44

我有一个方法来删除描述词的基础上的字符串,但我相信有更有效的方法来做到这一点。

iMonster可以是fat或c rogue,我想去掉fat

    private static string[] _adjectives = { "angry", 
                                            "big", 
                                            "fat", 
                                            "happy",
                                            "large", 
                                            "nasty", 
                                            "fierce", 
                                            "thin",
                                            "small", 
                                            "tall", 
                                            "short" };
    private static string RemoveMonsterAdjective(string iMonster)
    {
        foreach (string adjective in _adjectives)
        {
            if (iMonster.Contains(adjective))
            {
                iMonster = iMonster.Replace(adjective, "").Trim();
                break;
            }
        }
        return iMonster;
    }

希望有人能帮助我。

需要一种更好的方法来删除字符串中的模式

您可以使用正则表达式在单个调用中完成所有替换,如下所示:

return Regex.Replace(
    iMonster,
    @"'b(angry|big|fat|happy|...)'b",
    ""
).Trim();

这种方法背后的思想是构造一个正则表达式,将任何形容词作为单个单词匹配(因此"bigot"将不匹配,而"big"将匹配),并用空字符串替换该单词。

另一个可能的简短解决方案是:

var words = iMonster.Split(' ');
return string.Join(" ", words.Except(_adjectives));

我已经做了一些分析并比较了各种解决方案。

输入fat angry orc happy rogue和1000000次迭代:

00:00:01.8457067 lakedoo
00:00:01.9772477 Eve
00:00:04.3859120 dasblinkenlight

需要提到的是,我调整了dasblinkenlight的解决方案,使所有的形容词都在正则表达式中。

编辑:修正lakedoo的方法,去掉break