2

这是一个读取 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);

                }

到目前为止的问题是最终的字符串被输出到一个文本框中,但只在它覆盖时打印最后一个单词。这是一项大学作业,因此我正在寻找正确方向的推动力,而不是实际答案。非常感谢!

4

3 回答 3

2

string.Join()接受一组字符串,将它们连接在一起并返回结果。但是在您的情况下,该集合仅包含一项:value, 或not.

为了使您的代码正常工作,您可以使用以下内容:

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

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

于 2012-04-28T21:52:41.543 回答
0

Better to User StringBuilder Class for such purpose

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

于 2012-04-28T22:37:02.887 回答
0

这就是问题:

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

您只是将单个元素(最新的)与空格分隔符连接起来,从而覆盖您之前放入merge.

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

如果您的作业要求您使用Join来构建输出,那么您需要在words循环遍历数组时替换数组中的目标词。但是,为此,您需要使用其他一些循环机制,而不是foreach因为它不允许您修改要循环的数组。

于 2012-04-28T21:52:27.803 回答