带分词的TryGetValue

时间:2012-03-29 12:53:19

标签: c# dictionary split

大家好,我在发帖前看了一下,无法弄清楚如何做到这一点,所以我想知道是否有人可以提供帮助。

基本上,我的代码现在就像,如果我在文本框中输入一个单词,然后单击一个按钮,它会在文本框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";        
    }
}

我不确定如何编辑以满足我的需求,所以任何帮助?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();

还有一些比需要更多的东西(例如添加空格然后修剪,如果你在循环中可以弄清楚它是否在最后)但这绝对足以让你开始和你如果需要,可以开始优化。注意:我为自己的测试添加了字典,以确保它有效(它确实如此)。