1

好的,我有一个自动完成/字符串匹配问题要解决。我有一个用户在文本框中输入的表达式字符串,例如

在此处输入图像描述

更多详情:

表达式文本框有字符串

“买一些铝”

客户端在模糊匹配后有一个服务器给出的建议列表,该列表填充一个列表框

全麦麸、杏仁、字母意大利面

现在在 GUI 上,我有一个很好的智能感知风格的自动完成功能,但我需要连接“TAB”动作来完成。因此,如果用户按 TAB 并且“All Bran”是最重要的建议,则字符串变为

“买一些全麦麸”

例如字符串“Al”被替换为顶部匹配“All Bran”

这不仅仅是在表达式上拆分一个简单的字符串来匹配建议,因为表达式文本可能是这样的

“买一些全麦麸和铝”

有建议

字母意大利面

在这种情况下,我希望最终的 Al 被顶级匹配替换,因此结果变为

“买一些全麦麸和字母意大利面”

我想知道如何在 C# 中简单地执行此操作(只是 C# 字符串操作,而不是 GUI 代码),而无需返回服务器并要求进行替换。

4

3 回答 3

1

您可以使用正则表达式执行此操作,但似乎没有必要。以下解决方案假定建议总是以空格开头(或从句子的开头开始)。如果不是这种情况,那么您将需要分享更多示例以制定规则。

string sentence = "Buy some Al";
string selection = "All Bran";
Console.WriteLine(AutoComplete(sentence, selection));

sentence = "Al";
Console.WriteLine(AutoComplete(sentence, selection));

sentence = "Buy some All Bran and Al";
selection = "Alphabetti Spaghetti";
Console.WriteLine(AutoComplete(sentence, selection));

这是AutoComplete方法:

public string AutoComplete(string sentence, string selection)
{
    if (String.IsNullOrWhiteSpace(sentence))
    {
        throw new ArgumentException("sentence");
    }
    if (String.IsNullOrWhiteSpace(selection))
    {
        // alternately, we could return the original sentence
        throw new ArgumentException("selection");
    }

    // TrimEnd might not be needed depending on how your UI / suggestion works
    // but in case the user can add a space at the end, and still have suggestions listed
    // you would want to get the last index of a space prior to any trailing spaces
    int index = sentence.TrimEnd().LastIndexOf(' ');
    if (index == -1)
    {
        return selection;
    }
    return sentence.Substring(0, index + 1) + selection;
}
于 2012-06-15T14:45:25.310 回答
0

用于string.Join(" and ", suggestions)创建替换字符串,然后string.Replace()进行替换。

于 2012-06-15T11:24:07.437 回答
0

您可以在数组中添加列表框项目,并在遍历数组时,一旦找到匹配项,就打破循环并退出循环并显示输出。

于 2012-06-15T11:27:05.960 回答