1

OK、解決すべきオートコンプリート/文字列マッチングの問題があります。ユーザーがテキストボックスに入力した式の文字列があります。

ここに画像の説明を入力

もっと詳しく:

式のテキストボックスに文字列があります

「アルを買って」

クライアントには、あいまい一致の後にサーバーによって提供された提案のリストがあり、リストボックスに入力されます

オールブラン、アーモンド、アルファベットのスパゲッティ

現在、GUI には優れたインテリセンス スタイルのオートコンプリートがありますが、完全に実行するには "TAB" アクションを接続する必要があります。したがって、ユーザーが TAB を押して、"All Bran" が一番上の候補だった場合、文字列は次のようになります。

「オールブランを買って」

たとえば、文字列「Al」は、上位一致の「All Bran」に置き換えられました。

式のテキストは次のようになる可能性があるため、提案に一致するように式を単純に文字列で分割するだけではありません。

「オールブランとアルを買って」

提案付き

アルファベットティスパゲッティ

その場合、最終的なAlがトップマッチに置き換えられると予想されるため、結果は次のようになります

「オールブランとアルファベットティーのスパゲッティを買って」

サーバーに戻って置換を要求することなく、C# (GUI コードではなく C# 文字列操作のみ) でこれを行う方法を考えています。

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

リストボックスの項目を配列に追加し、配列をトラバースしている間に一致が見つかったら、ループを中断してループから抜け出し、出力を表示できます。

于 2012-06-15T11:27:05.960 に答える
0

string.Join(" and ", suggestions)置換文字列を作成し、置換を行うために使用しますstring.Replace()

于 2012-06-15T11:24:07.437 に答える