大家好,我在发帖前看了一下,无法弄清楚如何做到这一点,所以我想知道是否有人可以提供帮助。
基本上,我的代码现在就像,如果我在文本框中输入一个单词,然后单击一个按钮,它会在文本框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 :(得分: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();
还有一些比需要更多的东西(例如添加空格然后修剪,如果你在循环中可以弄清楚它是否在最后)但这绝对足以让你开始和你如果需要,可以开始优化。注意:我为自己的测试添加了字典,以确保它有效(它确实如此)。