C# 如何检查字符串中的重复字符

C# 如何检查字符串中的重复字符,c#,forms,C#,Forms,我正在创建一个程序,用于过滤和检查字典中是否存在该单词。问题是如何知道这个词是否有重复的字符 例如: string string1 = "sorrrrrrry"; 该字符串在字典中不存在,但如果删除重复的r,它将是“对不起” 我正在用拼写检查字典里是否有这个词。有什么解决办法吗?提前感谢您只能尝试通过几种模糊逻辑方法猜测哪个词是一个词,它可以匹配字典中的一些词,如果找到多个,则显示一个列表 也许你知道,智能手机键盘是如何帮助你的 这种方式或多或少是正确的(在打字时),而不是之后 但事后处理也是

我正在创建一个程序,用于过滤和检查字典中是否存在该单词。问题是如何知道这个词是否有重复的字符

例如:

string string1 = "sorrrrrrry";
该字符串在字典中不存在,但如果删除重复的r,它将是“对不起”


我正在用拼写检查字典里是否有这个词。有什么解决办法吗?提前感谢

您只能尝试通过几种模糊逻辑方法猜测哪个词是一个词,它可以匹配字典中的一些词,如果找到多个,则显示一个列表

也许你知道,智能手机键盘是如何帮助你的

这种方式或多或少是正确的(在打字时),而不是之后


但事后处理也是可能的,但需要更多的努力。

对于您的情况,您可以做的是:

  • 替换重复的字符,但2=>“对不起
  • 看看字典上是否有这个词
  • 如果没有,则将2个重复字符替换为1个字符=>“sory”(例如,如果您有“caat”)
  • 看看字典上是否有这个词
使用正则表达式
(\w)\1+
(匹配重复字符)并将第一次替换为
$1$1
(2个重复匹配字符)和by
$1

string input = "sorrrrrrry";
Regex regex = new Regex(@"(\w)\1+");

string replacement = "$1$1";
string res = regex.Replace(input, replacement);
Console.WriteLine(res);
//will output => sorry

replacement = "$1";
res = regex.Replace(input, replacement);
Console.WriteLine(res);
//will output => sory
警告 这可能会产生一些结果,但它有一些局限性,可能会产生意想不到的结果:

  • 如果重复两个以上的字符,您需要处理所有组合:如果您有“sooorry”,它将为您提供1。“很快”然后是2。“很抱歉”,因此算法将不起作用
  • “gooood”这个案子怎么办,是“good”还是“good”

您可能需要研究将字典存储在Lucene.Net中,并使用其松散匹配功能来匹配单词。

我不确定我是否理解您为什么这样做。”Sorrrry’在字典中不存在,那么在删除重复字符后,如果它存在又有什么关系呢。字典里有没有“dddddddd iiiiiiiiii cctiiiiooonnnnnnnnnnnnnaryyyyyyyyy”这个词?当你在字典里查到一个词,但它不存在的时候。你是怎么做的?你用另一种拼写方法来查的。我认为你不应该开始这样做。如果一个词(我现在脑子里没有任何例子)怎么办像
abbc
存在,也有
abc
?@im_a_noob;
God
Good
就是一个很好的例子。我之所以需要检查字符串,是因为我在分析推特的情感。有一项研究表明,在一个单词中添加相同的字母可以作为情感标记。@im_a_noob:如果它在tweet中不存在e dictionary我删除了这个词,但也有他们键入“scarrrry”的实例。这就是为什么我需要一个解决方案。也许可以通过这种方式处理,但一次只能处理一个多个字母。例如:soooorrry->soorrry检查是否存在。soorrry->soorry检查是否存在。继续,直到所有字符都是单个字符(exsory)。这仍然不是失败证明,但可能会给出更好的结果。如果失败,可以再次进行,但从反转眼睛开始,比如htat,现在的关键是找到所有可能的组合。可能op只是想知道这个词是否存在。在这种情况下,你的例子是“gooood”,它是“good”还是“good”" ? 没关系。他可以证实/不坚定。“你是对的,这一点不是限制,只是一个需要考虑的案例。谢谢你提出一些建议。