Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用splitwords的TryGetValue_C#_Dictionary_Split - Fatal编程技术网

C# 使用splitwords的TryGetValue

C# 使用splitwords的TryGetValue,c#,dictionary,split,C#,Dictionary,Split,大家好,我在发帖前看了一下,不知道该怎么做,所以我想知道是否有人可以帮忙 基本上,我的代码现在的工作原理是,如果我在文本框中输入一个单词,然后单击一个按钮,它会在文本框2中显示从我的字典中分割出来的单词 例如,如果我的字典文件包含黑色、白色,我在文本框1中输入黑色,然后单击按钮,文本框2中会显示白色。 …你明白了吗 所以不管怎样,我试图得到它,所以如果我在文本框1中输入一行文本,它会将该行文本复制到文本框2中并更改单词。所以 “我的椅子有一个黑色的靠垫”可以翻译成“我的椅子有一个白色的靠垫” 我

大家好,我在发帖前看了一下,不知道该怎么做,所以我想知道是否有人可以帮忙

基本上,我的代码现在的工作原理是,如果我在文本框中输入一个单词,然后单击一个按钮,它会在文本框2中显示从我的字典中分割出来的单词

例如,如果我的字典文件包含黑色、白色,我在文本框1中输入黑色,然后单击按钮,文本框2中会显示白色。 …你明白了吗

所以不管怎样,我试图得到它,所以如果我在文本框1中输入一行文本,它会将该行文本复制到文本框2中并更改单词。所以

“我的椅子有一个黑色的靠垫”可以翻译成“我的椅子有一个白色的靠垫”

我不知道该如何编辑它来满足我的需要,有什么帮助吗

var repStr = txtBox.Text;

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

txtBox2.Text = repStr;
您可能希望将kvp.Key替换为左侧和右侧的空格,将kvp.Value替换为左侧和右侧的空格,以确保不会替换部分单词,或者可以确保字典的键和值都用左侧和右侧的空格填充

使用字典: {“白色”、“黑色”} {“黑”、“白”}

如果这个句子同时包含白色和黑色,就会有问题

另一种选择是

您可能希望将kvp.Key替换为左侧和右侧的空格,将kvp.Value替换为左侧和右侧的空格,以确保不会替换部分单词,或者可以确保字典的键和值都用左侧和右侧的空格填充

使用字典: {“白色”、“黑色”} {“黑”、“白”}

如果这个句子同时包含白色和黑色,就会有问题

另一种选择是。

string test=txtBox.Text;
StringBuilder sb=新的StringBuilder();
Dictionary dict=新字典();
dict[“黑色”]=“白色”;
dict[“白色”]=“黑色”;
string[]chunks=test.Split(“”);
foreach(以块为单位的字符串)
{
字符串val;
if(dict.TryGetValue(s,out val))
{
附加某人(val);
某人加上(“”);
}
其他的
{
某人追加;
某人加上(“”);
}
}
textBox2.Text=sb.ToString().TrimEnd();
这里有一点超出需要(例如添加空格,然后在循环中确定是否在末尾时进行修剪),但这肯定足以让您开始,如果需要,您可以开始优化。注意:我添加字典只是为了我自己的测试,以确保它工作正常(确实如此)。

string test=txtBox.Text;
StringBuilder sb=新的StringBuilder();
Dictionary dict=新字典();
dict[“黑色”]=“白色”;
dict[“白色”]=“黑色”;
string[]chunks=test.Split(“”);
foreach(以块为单位的字符串)
{
字符串val;
if(dict.TryGetValue(s,out val))
{
附加某人(val);
某人加上(“”);
}
其他的
{
某人追加;
某人加上(“”);
}
}
textBox2.Text=sb.ToString().TrimEnd();


这里有一点超出需要(例如添加空格,然后在循环中确定是否在末尾时进行修剪),但这肯定足以让您开始,如果需要,您可以开始优化。注意:我添加字典只是为了我自己的测试,以确保它工作正常(确实如此)。

只更改一个单词?如果你有倍数呢?是否应将
白色
更改为
黑色
并将
黑色
更改为
白色
?如果可能有倍数,则是的。而且不仅仅是单向开关,因为它们在字典中用逗号分隔。黑、白、绿、蓝等只改变一个字?如果你有倍数呢?是否应将
白色
更改为
黑色
并将
黑色
更改为
白色
?如果可能有倍数,则是的。而且不仅仅是单向开关,因为它们在字典中用逗号分隔。黑色、白色、绿色、蓝色等等。如果要使用string.Split执行此操作,请在空格中拆分,对于结果数组中的每个单词,请使用d中的TryGetValue,如果找到则替换。但这只是无中生有(而且效率也较低),应该没问题,因为我的字典单词实际上都是大写的。所以它起作用了。但是,我如何将错误消息等与之结合?我不明白为什么会产生任何错误消息,但是如果您想通知用户没有任何单词发生更改,只需在循环后将txtBox.Text与repStr进行比较,查看是否有任何更改,或者将bool初始化为false,在循环中设置为true,最后检查它的值。是的,我明白了,你实际上就在那里。谢谢你的帮助。Kudos一段代码如何,它只会将字典中找到的单词更改为不同的颜色?如果您想使用string.Split进行此操作,则在空格中拆分,对于结果数组中的每个单词,从d中选择TryGetValue,如果找到则替换。但这只是无中生有(而且效率也较低),应该没问题,因为我的字典单词实际上都是大写的。所以它起作用了。但是,我如何将错误消息等与之结合?我不明白为什么会产生任何错误消息,但是如果您想通知用户没有任何单词发生更改,只需在循环后将txtBox.Text与repStr进行比较,查看是否有任何更改,或者将bool初始化为false,在循环中设置为true,最后检查它的值。是的,我明白了,你实际上就在那里。谢谢你的帮助。Kudos一段代码,只会将字典中的单词改成不同的颜色,怎么样?谢谢,我将仔细研究答案,以确保我完全理解。@user1300788不客气,虽然它没有那么简洁,但它肯定只匹配关键的单词,而且不会有部分匹配。这可能会在字典中重复相同的单词两次,这是一个遗憾。为了确保我的答案不会匹配部分单词,我建议用空格填充
var repStr = txtBox.Text;

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

txtBox2.Text = repStr;
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();