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);