替换内部的VarString唯一声明

时间:2013-04-04 05:36:42

标签: c# .net

我正在使用一些代码来替换代码编辑器。

就像我在RichTextbox中输入关键字(用作代码编辑器)时的场景一样 示例:我在"Ac"(rtb)中输入RichTextbox,然后会显示ComboBox(声明为lb)。

就像上面带字符串的context-hint / intellisense一样:

public string[] Accep = { "AcceptRejectRule" };
public string[] Acces = { "AccessibleEvents" };

然后我使用KeyEvent args代码,如果我在ComboBox中选择后按Enter键 lastword将替换为我之前输入的单词,就像我输入的那样 "Ac" "Ac"ComboBox开头的所有字符串都会显示:

---这适用于在richtextbox中输入的每个单词

if (token == "letterA" || token.StartsWith("Ac") || token.StartsWith("ac") || token.StartsWith("AC"))
{
    int length = line.Length - (index - start);
    string commentText = rtb.Text.Substring(index, length);
    rtb.SelectionStart = index;
    rtb.SelectionLength = length;
    lb.Visible = true;

    KeyWord keywordsHint = new KeyWord();

    foreach (string str in keywordsHint.ac)
    {
        lb.Items.Add(str);
        lb.SelectedIndex = lb.FindStringExact(str);
    }                   
}

---这是一个KeyEvent args

if (e.KeyCode == Keys.Enter)
{    
    string Slb = lb.SelectedText.ToString();
    var trimmed = RemoveFromStart(Slb, new String[] { "Ac", "Accep", "Acces" });
    rtb.SelectedText = trimmed;

    lb.Hide();
}

然后,当我选择ComboBox示例时,我输入"Ac",因为我想选择AccessibleEvent 当我按下Enter时,在ComboBox"AcceptRejectRule""AccessibleEvents")内 输出将为"AccessibleEvents",因为它已被声明"Ac“将被删除 替换此参数上方和内部的代码:

//Replacing Parameter:
public string RemoveFromStart(string s, IEnumerable<string> strings)
{
    foreach (var x in strings.Where(s.StartsWith))
    {
        return s.Remove(0, x.Length);
    }
    return s;
}

但是当我输入"Acces"而不是我选择"AccessibleEvents"时,输出将是: "AccescessibleEvents"代替“AccessibleEvent”,因为“Ac”是最短的 我在RemoveFromStart方法中使用的字符串。

现在我的问题是如何在代码中创建每个字符串:

var trimmed = RemoveFromStart(Slb, new String[] { "Ac", "Accep", "Acces" });

我可以将"Accep"删除偶数"Ac“的唯一标识为最短字符串。

提前多多谢谢你,希望你能帮助我:(。真的非常需要帮助。

1 个答案:

答案 0 :(得分:0)

我认为简单地排序降序将起作用,因为最长的字符串将首先匹配:

 var trimmed = RemoveFromStart(Slb, 
     (new String[] { "Ac", "Accep", "Acces" })
      .OrderByDescending(s=>s));

附注:在代码中考虑不区分大小写的比较。