Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过替换_C#_String_Replace - Fatal编程技术网

C# 通过替换

C# 通过替换,c#,string,replace,C#,String,Replace,我正在为一个游戏制作一个审查程序。我不知道怎么做。我有一串单词和句子。我已经找到了如何过滤单词和阻止消息。现在,我正试图用与一个单词长度相同的*替换单词。例如,如果有人说“去他妈的那个蠢驴”,那么结果会是*****那个蠢货***。下面是我正在使用的代码 public void Actionfor(ServerChatEventArgs args) { var player = TShock.Players[args.Who]; if (!a

我正在为一个游戏制作一个审查程序。我不知道怎么做。我有一串单词和句子。我已经找到了如何过滤单词和阻止消息。现在,我正试图用与一个单词长度相同的*替换单词。例如,如果有人说“去他妈的那个蠢驴”,那么结果会是
*****那个蠢货***
。下面是我正在使用的代码

        public void Actionfor(ServerChatEventArgs args)
    {
        var player = TShock.Players[args.Who];
        if (!args.Text.ToLower().StartsWith("/") || args.Text.ToLower().StartsWith("/w") || args.Text.ToLower().StartsWith("/r") || args.Text.ToLower().StartsWith("/me") || args.Text.ToLower().StartsWith("/c") || args.Text.ToLower().StartsWith("/party"))
        {
            foreach (string Word in config.BanWords)
            {
                if (player.Group.HasPermission("caw.staff"))
                {
                    args.Handled = false;
                }

                else if (args.Text.ToLower().Contains(Word))
                {
                    switch (config.Action)
                    {
                        case "kick":
                            args.Handled = true;
                            TShock.Utils.Kick(player, config.KickMessage, true, false);
                            break;
                        case "ignore":
                            args.Handled = true;
                            player.SendErrorMessage("Your message has been ignored for saying: {0}", Word);
                            break;
                        case "censor":
                            args.Handled = false;
                            var wordlength = Word.Length;

                            break;
                        case "donothing":
                            args.Handled = false;
                            break;
                    }
                }
            }
        }
        else
        {
            args.Handled = false;
        }
    }

   public string[] BanWords = { "fuck", "ass", "can i be staff", "can i be admin" };
有些地方在我的“审查员”案例中有类似的代码


然而,我总是遇到一个错误,无法将字符串转换为字符,也无法找出其他方法来执行。

编译器正在告诉您这个问题;采用
char
int
,而不是
字符串
int


它试图将
*
从字符串转换为字符。将双引号
替换为单引号

对于
字符
,请使用单引号
而不是双引号
,如下所示:

new string('*', Word.Length)
在代码中,不需要替换。简单地做:

Word = new string('*', Word.Length);

我看不到你实际将输入与数组BanWordsEdit进行比较的代码:可能是一种将其相乘的方法,因此如果单词dumby的长度为4,则添加一个字符“”,直到有4个“”或****并将其放入一个字符中?如果你试图检查单词,为什么你要在被审查的单词的每个字符上都留下一个星号?你知道如果有人说你,我们对他们的意思有很好的理解。为什么不
*你
或者
我正在把游戏中说的文字与公共字符串[]BanWords进行比较,我就是想不出如何替换它,以便*代表它的长度。至于纸杯蛋糕,它将采取一种单独的单词方法。旁注:虽然你的代码使用一整套不应该使用的单词可能很重要,但在公共帖子中避免使用这些单词可能是一个好主意——如果你不使用f-words,你的问题不会改变。对于公共示例,也不需要使用字符串而不是枚举值-请注意您发布的代码,以便其他人阅读。这将是完美的,但它不允许我再次将其分配给Word,因为它正在重复检查单词,并将在搜索整个句子之前替换它。@user3437879但您的代码正在分配给
单词
,我只是缩短了它。你的问题有错吗?您的行是
Word=Word.Replace(Word,新字符串(“*”,Word.Length))。是的,这使我能够修复它,使错误不再发生。但是当我用它作为。。。Word=新字符串('*',Word.Length);它不允许我使用它,因为Word在前段变量迭代中。@ USSR337 899我看不到你的代码>前缀代码,以及你如何使用<代码> Word < /C>变量,所以很难提出一些建议,但是你可以考虑将<代码>前缀 >改为<代码> < <代码> >。或者,您可以使用另一个变量
badWord=newstring('*',Word.Length)我想我的问题是,如果我将其设置为var input=Word.Replace(Word,新字符串('*',wordlength)),Word就是要审查的单词或句子;它会接受,但是它不会吐出来,在任何需要审查的词的地方说,有什么想法吗?
Word = new string('*', Word.Length);