2013-06-04 318 views
2

我有一個字符串,它是一個句子或兩個長(多於一個字)。在這個句子中會有一個哈希標記的詞,例如#word。這需要用*word*代替。c中的字符串替換字符#

如果一句話是:

Today the weather is very nice #sun 

它應該成爲:

Today the weather is very nice *sun* 

我怎麼會去這樣做呢?

+0

這是一個過於重複的問題 –

回答

8

你可以做一個正則表達式,像這樣:

var output = Regex.Replace(input, @"#(\w+)", "*$1*"); 
+0

這是怎麼得到一個*在這個詞的盡頭? – Rothmanberger

+0

@ user2256772我沒有看到你的編輯關於SO刪除你的星號。看到我更新的答案。 –

+0

現在就試試吧 – Rothmanberger

0

試試這個:

string theTag = "sun"; 
string theWord = "sun"; 

string tag = String.Format("#{0}", theTag); 
string word = String.Format("*{0}*", theWord); 

string myString = "Today the weather is very nice #sun"; 
myString = myString.Replace(tag, word); 
+0

問題是這個詞可能是任何東西,而不僅僅是太陽 – Rothmanberger

+0

@ user2256772如果使用String.Format創建要替換的標記,就像上面的代碼一樣,那麼它會正常工作 – rhughes

1

你可以試試這個

string text = "Today the weather is very nice #sun"; 

int startindex = text.Indexof('#'); 

int endindex = text.IndexOf(" ", startIndex); 

text = text.Replace(text.substring(startIndex, 1), "*") 
text = text.Replace(text.substring(endindex, 1), "*") 
0

沒有花哨的功能和庫只是常識並解決您的問題。它支持儘可能多的散列詞,只要你願意。

爲了演示它是如何工作的,我創建了1個文本框和1個按鈕,但是你可以在控制檯或幾乎任何東西中使用這個代碼。

 string output = ""; bool hash = false; 
     foreach (char y in textBox1.Text) 
     { 
      if(!hash) //checks if 'hash' mode activated 
      if (y != '#') output += y; //if not # proceed as normal 
      else { output += '*'; hash = true; } //replaces # with * 
      else if (y != ' ') output += y; // when hash mode activated check for space 
      else { output += "* "; hash = false; } // add a * before the space 
     } if (hash) output += '*'; // this is needed in case the hashed word ends the sentence 
     MessageBox.Show(output); 

不料

Today the weather is very nice #sun 

成爲

Today the weather is very nice *sun* 

這裏是相同的代碼,但在方法的形式爲你彈出就在你的代碼

public string HashToAst(string sentence) 
    { 
     string output = ""; bool hash = false; 
     foreach (char y in sentence) 
     { 
      if (!hash) 
       if (y != '#') output += y; 
       else { output += '*'; hash = true; } // you can change the # to anything you like here 
      else if (y != ' ') output += y; 
      else { output += "* "; hash = false; } // you can change the * to something else if you want 
     } if (hash) output += '*';     // and here also 
     return output; 
    } 

證明你如何修改這個以下是一個可定製的版本

public string BlankToBlank(string sentence,char search,char highlight) 
    { 
     string output = ""; bool hash = false; 
     foreach (char y in sentence) 
     { 
      if (!hash) 
       if (y != search) output += y; 
       else { output += highlight; hash = true; } 
      else if (y != ' ') output += y; 
      else { output += highlight+" "; hash = false; } 
     } if (hash) output += highlight; 
     return output; 
    } 

因此搜索將搜索詞前的字符和高亮字符將圍繞這個詞。字被定義爲字符,直到它到達空格或字符串的末尾。