簡體   English   中英

用粗體字替換多個字

[英]replace multiple words by the same word in bold

我在RichTextBox中有一個文本,並且有一個單詞列表(wordList)-我在使用winforms。
我需要做的是wordList中的所有單詞都以粗體顯示在文本中。
范例:
文字:“我有文字,我需要將一些文字加粗”

列表中的單詞: "need"; "some"; "bold" "need"; "some"; "bold"

結果:“我有一個文本, 需要粗體顯示 一些單詞”
我嘗試了這個(我在stackoverflow中看到了類似的帖子)

text= "" + text+ "";

foreach (var word in wordList)
{
    string w = string.Format(" {0} ", word);
    if (text.Contains(w))
    {
        while (text.Contains(w))
        {
            text= text.Replace(w, "<b>"+w+"</b>");
        }
    }
}

text = text.Trim();

我怎么能說w一詞要用粗體顯示?

編輯:
我嘗試了這個解決方案

  public string MakeBold(string text, string[] splitwords)
  {
      var sb = new StringBuilder();
      var words = text.Split(' ');
      sb.Append(@"{\rtf1\ansi ");
      foreach (var word in words)
      {
          if (splitwords.Contains(word))
          {
              sb.Append(@"\b" + word + @"\b0");
          }
          else
          {
              sb.Append(word);
              sb.Append(@" ");
          }
      }
      sb.Append(@"}");
      return sb.ToString();
  }

結果在RichTextBox中

{\rtf1\ansiI have a text and I \bneed\b0to put \bsome\b0words in \bbold\b0}    

任何想法為什么?

我是否正確,這是在回發/ ajax調用中發生的?

之后,您是否需要以原始形式返回字符串? 因為您將需要刪除所有粗體標簽。

但是,出於顯示目的,您可以將字符串分割在一個空格上,這將為您提供一個數組。 然后只需將所有匹配的數組項替換為+ arrayItem +即可

(您最好將它們放在跨度的范圍內,並與實際的類放在一起。這樣可以給您更大的靈活性-可以更改顏色,字體大小,粗體等)

另外,如果要在另一個單詞中出現該單詞,是否要使其加粗? 例如,如果您正在尋找“出售”,而inputString在“出售我的房子”,那么您最終將得到:“出售我的房子”。

為簡單起見:

var inputString = "your input string!"
var outputString = "";
var wordsToFindArray = [string array of the words you are looking to make bold.]
foreach (wordToFind in wordsToFind)
{
    //pick one of these lines, not both, as the second will overwrite the first

    outputstring = inputstring.replace(wordToFind, "<span class=\"found-word\">" + wordToFind + "</span>"); //add span class
    outputstring = inputstring.replace(wordToFind, "<b>" + wordToFind + "</b>"); //boldify
}

return outputString;

但是,這也會加粗/將span類添加到單詞中找到的單詞。

或者,如上所述,您可以對輸入字符串,“”或“。”等進行拆分,然后在每個輸入字符串數組項上運行foreach。

PS。 這是不區分大小寫的。

希望能有所幫助。

似乎您將網絡與富文本框混淆了。 該示例代碼僅在空格上分割,並且對Capitals無效。

public string MakeBold(string text, string[] splitwords)
{
    var sb = new StringBuilder();
    var words = text.Split(" ");   
    sb.Append(@"{\rtf1\ansi");
    foreach (var word in words){
      if (splitwords.Contains(word)){
         sb.Append(@"\b"+word+ @"\b0 ");
      }
      else
      {
         sb.Append(word);
         sb.Append(@" ");
      }
    }
    sb.Append(@"}");
    return sb.ToString();
}

謝謝大家,但我找到了答案。
我使用的是RichTextBox,但是當我在其中顯示結果時,卻忘記了使用.Rtf而不是.Text ....(愚蠢的我!),一切正常!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM