2012-03-29 34 views
0

嗨,我在發帖之前看了一下,無法真正弄清楚如何做到這一點,所以我想知道是否有人可以提供幫助。TryGetValue with splitwords

基本上,我的代碼剛纔的工作原理是,如果我在文本框中輸入一個單詞,然後點擊一個按鈕,它會顯示拆分單詞從我的字典在文本框中輸入2

例如,如果我的字典文件包含黑色,白色,我在文本框1中輸入黑色,然後單擊一個按鈕,白色文本框中顯示2. ...你得到我嗎?

因此,無論如何,我試圖獲得它,所以如果我在文本框1中輸入一行文本,它會將該行文本複製到文本框2並更改單詞。所以

「我的椅子上有一個黑色的墊子」將轉化爲「我的椅子上有一個白色的坐墊」

private void btnTrans_Click(object sender, EventArgs e)  
{ 
    string outputString = null; 
    if (d.TryGetValue(inputBx.Text, out outputString))  
    {        
     outputBx.Text = inputBx.Text + outputString; 
    } 
    else  
    {     
     outputBx.Text = "Unknown";   
    } 
} 

我不知道我怎麼會去有關編輯是適合我的需要,所以任何幫助?

+0

更改將只另一個字?如果你有倍數? 「白色」應該變成「黑色」還是「黑色」變成「白色」? – Oded 2012-03-29 12:58:06

+0

哎呀,如果可能有倍數。而且不僅僅是單向開關,因爲它們在字典中以逗號分隔。黑色,白色綠色,藍色等 – user1300788 2012-03-29 13:03:55

回答

2
var repStr = txtBox.Text; 

foreach (var kvp in d) 
{ 
    repStr = repStr.Replace(kvp.Key, kvp.Value); 
} 

txtBox2.Text = repStr; 

你可能會想,以取代在左側和右側的空間kvp.Key與空格kvp.Value左右,以確保您不會替換單詞的一部分,也可以確保字典的鍵和值都在左側和右側填充空格。

隨着詞典: {「白」,「黑」} { 「黑」,「白」}

將有如果句子中包含白色和黑色是一個問題。

另一種方法是Jetti's answer

+0

正確的工作謝謝! :D – user1300788 2012-03-29 13:06:45

+0

如果您想要使用string.Split來完成此操作,然後將其拆分爲空格和結果數組中的每個單詞,請從d開始TryGetValue,如果找到,則進行替換。但這只是一無是處(而且效率也不高) – SimpleVar 2012-03-29 13:08:48

+0

它應該沒問題,因爲我的字典中的字實際上都是CAPS。所以它的作品。但是,我將如何去結合錯誤消息等? – user1300788 2012-03-29 13:18:33

1
string test = txtBox.Text; 
StringBuilder sb = new StringBuilder(); 
Dictionary<string, string> dict = new Dictionary<string, string>(); 
dict["black"] = "white"; 
dict["white"] = "black"; 
string[] chunks = test.Split(' '); 
foreach (string s in chunks) 
{ 
    string val; 
    if (dict.TryGetValue(s, out val)) 
    { 
    sb.Append(val); 
    sb.Append(" "); 
    } 
    else 
    { 
    sb.Append(s); 
    sb.Append(" "); 
    } 
} 
textBox2.Text = sb.ToString().TrimEnd(); 

有更多的有一點比實際需要(如添加空格,然後修剪時,你可以在循環弄清楚,如果是在年底或沒有),但是這絕對足以讓你開始了,你可以開始優化,如果你需要。注:我添加了字典僅用於我自己的測試,以確保它的工作(它確實)。

+0

謝謝,我要玩的答案,以確保我完全理解它。 – user1300788 2012-03-29 13:15:20

+0

@ user1300788不用客氣,它不像[Yorye Nathan的回答](http://stackoverflow.com/a/9925873/509746)那麼簡潔,但它肯定只會匹配那些關鍵詞,而且你贏了沒有部分匹配。 – Jetti 2012-03-29 13:24:58

+0

這可能會在字典中兩次出現相同的單詞,這是一個恥辱。爲了確保我的答案不符合部分詞彙,我建議在左側和右側填充空格。 – SimpleVar 2012-03-29 13:53:46

相關問題