0

単語の辞書に格納するために空白で分割したい文字列があります(十分に単純です)。ただし、単語のインデックスと長さもそれぞれ必要です。

これまでのところ、私は単語の辞書とそれらが見つかった順序を持っています....

 private Dictionary<int,String> makeDictionary(String ASCII)
    {
        string[] t = ASCII.Split(new[] { ' ' },
           StringSplitOptions.RemoveEmptyEntries);
        Dictionary<int, string>  aDictionary = new Dictionary<int, string>();
        for (int i = 0; i < t.Length; i++)
        {
            t[i] = stripSymbolsFromString(t[i]);

            if (!aDictionary.ContainsValue(t[i]) && t[i] != "")
            {
                aDictionary.Add(i, t[i]);
            }
        }
        return aDictionary;
    }

インデックスを保持しながら .Split() を使用する方法を知っている人はいますか、それとも別の連結手法を使用する必要がありますか? 誰かが以下に投稿したように、正規表現を使用すると一致のインデックスが得られます。

編集:長さは必要ありません。誰かが指摘したように、文字列から取得できます。単語の開始インデックスだけが必要です。

EDIT2:重複する単語は無視します。

EDIT3:これは私が使用する文字列の例です:

Lorem Ipsum は、印刷および植字業界の単なるダミー テキストです。Lorem Ipsum は、1500 年代に未知の印刷業者がタイプのギャレーを取り、それをスクランブルしてタイプ見本帳を作成して以来、業界の標準的なダミー テキストでした。それは 5 世紀だけでなく、電子植字への飛躍にも耐え、本質的に変わっていません。1960 年代に Lorem Ipsum のパッセージを含む Letraset シートがリリースされ、最近では Lorem Ipsum のバージョンを含む Aldus PageMaker のようなデスクトップ パブリッシング ソフトウェアで普及しました。

したがって、最初のいくつかの要素は次のようになります

[0]=>ローラム、

[6]=>イプサム、

[12]=>は

ここで、数値 0,6,12 は文字列内の単語の元のインデックスです

4

2 に答える 2

2
string s = "abc def ghijkl mno abc";

var words = Regex.Matches(s, @"[^ ]+").Cast<Match>()
                .Select(m => new
                {
                    Str = m.Value,  //OR Length = m.Value.Length
                    Offset = m.Index
                })
                .ToList();

さらに処理しwordsて、dictionary

var dict = words.GroupBy(w => w.Str)
                .ToDictionary(g => g.Key, g => g.Select(x => x.Offset).ToList());
于 2013-03-18T18:47:12.623 に答える
0

正規表現

マッチクラス

一致にはインデックスと長さがあります

于 2013-03-18T18:46:26.530 に答える