1

C# を使用して読み取ったファイルで、"Monday" という単語をすべて検索できるようにしたいと考えています。ファイルを読み取ることができ、最初の月曜日を読み取ってそのインデックス値を受け取ることができますが、ファイル内のすべての月曜日のインデックス値が必要です。

    if (ElementS == "2")
    {
        Console.WriteLine("Enter The name of the day e.g. Monday, Tuesday   etc.");
        string ElementA =  Convert.ToString(Console.ReadLine());



        foreach (string Monday in DayLines)
        {
        string Mday = "Monday";
        int Found = Search(DayLines, Mday);
        Console.WriteLine("The index is {0}", Found);
        }

それが与える出力はこれです: // The index is 0 そしてそれは月曜日だけでなくファイル内の各要素に対してそれを行います。

4

3 に答える 3

0

そして、LINQと別の答えから適応した拡張メソッドを使用したもの:

static class Extensions
{
    public static IEnumerable<int> AllIndexesOf(this string str, string value)
    {
        for (var index = 0; ; index += value.Length)
        {
            index = str.IndexOf(value, index, StringComparison.Ordinal);
            if (index == -1)
                yield break;
            yield return index;
        }
    }
}

...

var allMondayIndexes = File
            .ReadAllLines("input.txt")
            .SelectMany(s => s.AllIndexesOf("Monday"));

行番号もあるともっと便利だと思います。

于 2015-04-22T05:47:07.210 に答える
0

私はあなたがこのようなことをしたいと思います:

internal static void Main(string[] args)
{
    var dayLines = new List<string>()
        {
            "Monday Monday Monday",
            "Tuesday"
        };

    var dayToFind = Console.ReadLine();

    foreach (var line in dayLines.Where(l => l.Contains(dayToFind)))
    {
        var index = -1;
        do
        {
            index = line.IndexOf(dayToFind, index + 1);

            if (index > -1)
                 Console.WriteLine("The index is {0}", index);
        }
        while (index > -1);
    }

    Console.ReadLine();
}

検索の開始点として前のインデックスを使用する内部ループが必要です。そうしないと、最初のインスタンスを取得し続けるだけです。

「月曜日」の出力:

The index is 0
The index is 7
The index is 14
于 2015-04-22T03:50:27.350 に答える