2

以下のコードよりも洗練された方法を見つけて、含まれている単語の 1 つのインデックスに基づいて文のリストを取得しようとしています。たとえば、ユーザー名などの単語のリストを指定すると、それらすべての単語のインデックスが検索され (これは既に行われており、GetWordsMatches メソッドです)、その単語のインデックスを使用して、文全体をつかみます。

私には 2 つの問題があります。1 つは、単語の前から前のピリオドまでを調べる方法がわかりません。1 つは最後の単語の一致だけで、クラッシュを防ぐ方法がわかりません。ファイルの終わりの前のピリオド。

public static List<string> GetSentencesFromWords(List<string> Words, string FileContents)
    {
        List<string> returnList = new List<string>();
        MatchCollection mColl = GetWordsMatches(Words,FileContents);
        foreach (Match ma in mColl)
        {
            int tmpInd = ma.Index;
            int endInd = FileContents.IndexOf(".", tmpInd);
            string tmp = FileContents.Substring(tmpInd,endInd);
            returnList.Add(tmp);
        }
        return returnList;
    }

これを行うよりエレガントな方法はありますか?

4

2 に答える 2

5

ただ速い...

  • LastIndexOf(str, index)ある位置から後方に検索 するために使用できます。

  • if「終了条件」については、「 」検索に 1 つ追加するだけでよいと思い.ます (最後に到達すると、「-1」が返されます)。

...とにかく、ファイルの内容を (区切り記号として) 分割する方が良いかもしれません。そうすれ.ば、最後の行を取得するので、最後の行で問題が発生することはありません。次に、単語を検索します (各行内IndexOfで current を使用index)。または、おそらく enumerator (w/ yield return) 拡張メソッドを使用してすべてを並行して実行し、IEnumerable を返して、より「機能的」になり、他のものをクエリに追加します。

お役に立てれば

于 2012-04-04T00:57:58.533 に答える