获取特定字符之间的文本

时间:2017-06-03 08:08:13

标签: c# .net

我想在';'之间得到文字字符。但是,如果有3个匹配,我希望得到';'之间的文本当前光标位置的字符。我正在使用多文本框。

实施例

select * from database;

----> **Lets say my cursor is here** 
select 
orders from
customer;


select * from employees;

所以,我只想获得'从客户选择订单'文字。

你能否分享一下你的想法?

2 个答案:

答案 0 :(得分:0)

要实现这一点,首先必须找到;的所有标记。为此,请遍历所有指标(source):

private List<int> AllIndicesOf(string strToSearch, string fullText)
{
    List<int> foundIndices = new List<int>();
    for (int i = fullText.IndexOf(strToSearch); i > -1; i = fullText.IndexOf(strToSearch, i + 1))
    {
        foundIndices.Add(i + 1);
    }
    return foundIndices;
}

然后你必须将你的位置与那些指数进行比较,因为你只需要光标后面的索引(;):

List<int> indicies = AllIndicesOf(";", txtBxText.Text);
try
{
    if (indicies.Count > 0)
    {           
        int cursorPos = txtBxText.SelectionStart;
        var indicesBefore = indicies.Where(x => x < cursorPos);
        int beginIndex = indicesBefore.Count() > 0 ? indicesBefore.Last() : 0;
        int endIndex = indicies.Where(x => x > beginIndex).First();
        txtBxSelected.Text = txtBxText.Text.Substring(beginIndex, endIndex - beginIndex);
    }
}
catch { }

如果您的游标位置在所有其他索引之后,try-catch语句用于阻止Exception

示例项目可以是downloaded here

答案 1 :(得分:0)

此解决方案完美有效,但您需要再次检查并考虑一些可能的例外情况。我自己并不认为,因为我认为最好由你来处理。我还使用了richTextBox,它比多行文本框更好。 享受代码兄弟

 private void button1_Click(object sender, EventArgs e)
        {
            var ultimateResult = string.Empty;
            var cusrPosition = richTextBox1.SelectionStart;
            var currentStr = string.Empty;
            var strDic = new Dictionary<string,int>();                
            var textArr = richTextBox1.Text.ToCharArray();
            for (var i = 0; i < textArr.Count(); i++)
            {
                if (textArr[i] != ';')
                    currentStr = currentStr + textArr[i];
                else
                {
                    strDic.Add(currentStr,i);
                    currentStr = string.Empty;

                }
            }
            ultimateResult = strDic.First(item => item.Value >= cusrPosition).Key;
            textBox1.Text = ultimateResult;

        }