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

时间:2013-06-06 13:52:22

标签: c# forms

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

例如:

string string1 = "sorrrrrrry";

字典中不存在该字符串,但如果删除重复的r,则“抱歉”。

我正在使用hunspell检查字典中是否存在该单词。有解决方案吗?提前致谢

3 个答案:

答案 0 :(得分:2)

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

  • 替换重复的字符但是2 => “的抱歉
  • 查看词典中是否存在该词
  • 如果没有,请将2个重复的字符替换为1个字符=> “ sory ”(如果您有“ caat ”)
  • 查看词典中是否存在该词

使用正则表达式(\w)\1+(匹配重复的字符)并将第一次替换为$1$1(2个重复匹配的字符)和$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

警告 这可以给出一些结果它有一些限制并且可能产生意想不到的结果:

  • 如果重复两个以上的字符,你需要处理所有的组合:如果你有“ soooorrrry ”它会给你1.“ soorry ”然后2 。“ sory ”,因此算法无效
  • 如何处理案件“gooood”,是“好”还是“上帝”?

答案 1 :(得分:0)

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

也许您知道,智能手机键盘如何帮助您。

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

但之后也有可能,但需要更多的努力。

答案 2 :(得分:0)

您可能希望将字典存储在Lucene.Net中,并使用其松散的匹配功能来匹配单词。