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ただし、あなたの場合、コレクションには、、またはの1つのアイテムしか含まれていませんnot

コードを機能させるには、次のようなものを使用できます。

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

ただし、文字列の動作方法により、これは非常に遅くなるため、StringBuilder代わりに使用する必要があります。

于 2012-04-28T21:52:41.543 に答える
0

これが問題です:

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

単一の要素(最新)をスペース区切り文字で結合しているだけなので、以前に入力したものが上書きされmergeます。

文字列を使い続けたい場合はConcat、出力に新しい単語を追加するために使用する必要がありますが、毎回文字列を再作成するため、これは遅くなります。StringBuilder出力を作成するために使用する方が効率的です。

割り当てで出力の作成に使用する必要がある場合は、配列内のターゲットワードをループするときに、それらJoinを置き換える必要があります。ただし、そのためには、ループしている配列を変更できないため、words他のループメカニズムを使用する必要があります。foreach

于 2012-04-28T21:52:27.803 に答える
0

StringBuilderそのような目的のためにユーザークラスに適しています

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

于 2012-04-28T22:37:02.887 に答える