字符串连接/覆盖

本文关键字:覆盖 连接 字符串 | 更新日期: 2023-09-27 18:32:29

这是一个程序,它读取CSV文件,将值添加到字典类,然后分析文本框中的字符串以查看是否有任何单词与字典条目匹配。它将替换缩写(LOL,ROFL等)到它们的真实单词中。它通过将输入的文本拆分为单个单词来匹配字符串。

 public void btnanalyze_Click(object sender, EventArgs e)
    {
        var abbrev = new Dictionary<string, string>();
        using (StreamReader reader = new StreamReader("C:/Users/Jordan Moffat/Desktop/coursework/textwords0.csv"))
        {
            string line;
            string[] row;
            while ((line = reader.ReadLine()) != null)
            {
                row = line.Split(',');
                abbrev.Add(row[0], row[1]);
                Console.WriteLine(abbrev);
            }
        }

        string twitterinput;
        twitterinput = "";
        // string output;
        twitterinput = txtInput.Text;
        {
            char[] delimiterChars = { ' ', ',', '.', ':', ''t' };
            string text = twitterinput;
            string[] words = twitterinput.Split(delimiterChars);

         string merge;
            foreach (string s in words)
            {
                if (abbrev.ContainsKey(s))
                {
                    string value = abbrev[s];

                    merge = string.Join(" ", value);
                }
                    if (!abbrev.ContainsKey(s))
                    {
                        string not = s;
                        merge = string.Join(" ", not);
                    }
                        ;
                        MessageBox.Show(merge);
                }
到目前为止,问题是最后一个

字符串被输出到文本框中,但只打印覆盖的最后一个单词。这是大学作业,所以我正在寻找朝着正确方向的推动,而不是实际的答案。非常感谢!

字符串连接/覆盖

string.Join()获取字符串集合,将它们连接在一起并返回结果。但在您的情况下,集合仅包含一个项目:valuenot

要使代码正常工作,可以使用以下内容:

merge = string.Join(" ", merge, value);

但是由于字符串的工作方式,这会很慢,所以你应该改用StringBuilder

这是问题所在:

string not = s;
merge = string.Join(" ", not);

您只是使用空格分隔符连接单个元素(最新元素),从而覆盖您之前放入merge的内容。

如果你想坚持使用字符串,你需要使用Concat将新单词附加到输出中,尽管这会很慢,因为你每次都重新创建字符串。使用 StringBuilder 创建输出会更有效。

如果你的作业要求你使用 Join 来构建输出,那么你需要在循环访问 words 数组中的目标单词时替换它们。但是,为此,您需要使用除foreach以外的其他循环机制,因为这不允许您修改正在循环的数组。

为此目的最好使用StringBuilder

http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx