2016-01-17 1 views
1

Я пытаюсь создать поисковый код, который позволяет находить текст в обоих направлениях (справа и слева). Я уже сделал код, который ищет текст справа, но не слева.Как найти текст в richtextbox в обратном направлении?

Пример того, что я пытаюсь сделать:

example1 example2 example3 Example4

Допустим, я нашел 'example3' (идущий справа), и теперь мне нужно найти example2 (идти влево) Как я могу сделать этот код?

Вопрос: Как сделать код, который ищет текст, идущий влево (назад)?

Вот пример того, что я пытался сделать для поиска текста слева:

try 
{ 
    richTextBox1.Focus(); 
    richTextBox1.Find(findwhat, findPos, RichTextBoxFinds.Reverse); 
    richTextBox1.Select(findPos, findwhat.Length); 
    findPos += findwhat.Length; 
} 
catch 
{ 
    findPos = 0; 
} 
+0

Итак, вы хотите выполнить поиск с конца текста? Не могли бы вы объяснить, что вы имеете в виду? Кроме того, в чем проблема с вашим текущим кодом? Выбрасывает исключение? –

+0

Вы можете сначала отменить текст и найти его ;-) –

+0

Допустим, я нашел «example3», теперь мне нужно найти example2. Идите налево. Как я смогу сделать этот код? пример1 пример2 пример3 пример4 –

ответ

0

Простой способ будет перебирать назад и проверить, если текущая строка содержит заданную строку:

public static class Extension{ 
    public static bool ReverseContains(this string container, string token) 
    { 
     if (string.IsNullOrEmpty (container) || string.IsNullOrEmpty (token)) 
     { 
      return false;  
     } 
     int offset = container.Length - token.Length; 
     string start = container.Substring (offset); 
     for (int i = offset - 1; i >= 0; i--) 
     { 
      start = container[i] + start; 
      if(start.Contains(token)){ return true;} 
     } 
     return false; 
    } 
} 

Это вернет true, если контейнер содержит токен. Поиск начнется с конца.

Он не рассматривает верхний/нижний регистр, поэтому «Слова» не будут найдены в «Букет слов». Вам нужно будет добавить дополнительный параметр, чтобы при необходимости сделать все в нижнем регистре.

string str = "My string with many words to be found"; 
string wordToFind = "words"; 

bool result = str.ReverseContains(wordToFind); 
+0

Не могли бы вы объяснить, как использовать это, чтобы я мог найти текст, идущий справа налево. благодаря –