如何在给定起始索引的情况下突出显示整个单词

本文关键字:情况下 显示 单词 索引 | 更新日期: 2023-09-27 18:29:15

我有一个RichTextBox,我想突出显示一个完整的单词,只给出它的起始索引。

如果起始索引和长度已知,我可以突出显示一个单词,但在这种情况下,我不知道单词的长度。是否可以从起始索引突出显示到空格的第一次出现?

更新:

这就是我迄今为止所尝试的:

resultsRichTextBox.Select(novelOffset - 2, searchString.Length);

不幸的是,"searchstring"并不总是要搜索的单词的长度,所以我需要一种方法来查找从novelOffset - 2到最近空格的字符数。

如何在给定起始索引的情况下突出显示整个单词

您可以这样做:

int length = this.richTextBox1.Text.Skip(startIdx)
                              .TakeWhile(x => char.IsLetterOrDigit(x))
                              .Count();
this.richTextBox1.Select(startIdx, length);
this.richTextBox1.SelectionBackColor = Color.Yellow;

显然,您可以将char.IsLetterOrDigit更改为x != ' '或您喜欢的任何内容。

您可以使用String.IndexOf(Char, Int32):

报告指定的第一次出现的从零开始的索引此字符串中的Unicode字符。搜索从指定的开始字符位置。

它会给你单词的起始和结束索引。然后您可以突出显示它!

int endIndex = resultsRichTextBox.Text.IndexOf(' ', novelOffset - 2);
resultsRichTextBox.Select(novelOffset - 2, (endIndex - (novelOffset - 2)) );

你只需要处理在单词后面找不到空格的情况。如果发生这种情况,endIndex的值将为-1。我将简单地将endIndex的值设置为searchString.Length

int startIndex;
//fill startIndex with the known value
int endIndex = startIndex;
while(rtb.Text.CharAt(endIndex) != ' ' && endIndex < rtb.Text.Length)
{
    endIndex++;
}
rtb.Select(startIndex, endIndex);

如果提供单词的起始索引并查找SPACE,则可以使用Find方法。Find将返回下一个空格的索引,实际上是单词的末尾(found-1)。

然后,您可以使用选择通话。

相关文章: