szukanie linii w stringu

0

Witam

Jak można odnaleźć numer linii w stringu zawierającej znak np "*".
Metoda IndexOf zwraca mi indeks znaku ale nie wiem jak to powiązać z numerem linii.

Do stringa wczytuje plik tekstowy.

Pozdrawiam
Artur

0

Najprościej będzie zrobić split po znaku nowej linii i wtedy szukać *:

static void Main(string[] args)
{
    var str = "Line 1\n" + "Line 2\n" + "Line 3\n" + "Line * 4\n" + "Line 5\n";
    var split = str.Split('\n');
    for (int index = 0; index < split.Length; index++)
    {
        var s = split[index];
        var indexOf = s.IndexOf("*", StringComparison.Ordinal);
        if (indexOf != -1)
        {
            Console.WriteLine("Line: {0}. IndexOf {1}.", index + 1, indexOf + 1); // Line: 4. IndexOf 6.
        }
    }
}
2

String to łańcuch znaków. Nie ma bezpośrednio żadnego powiązania z liniami - tak jak widzisz w pliku. String to po prostu ciąg znaków. Może zawierać w sobie znaki specjalne - np. znaki końca linii (\n) i/lub powrotu karetki (\r). To są specjalne znaki, które mówią komputerowi, że w tym miejscu ma się zacząć nowa linia.

Jeśli więc chcesz mieć string podzielony jawnie na linie, żeby móc się do tych linii odwołać, musisz mieć listę stringów. Musisz ją zbudować w taki sposób, że dzielisz ten string pod kątem znaku nowej linii (\n). To Ci zrobi tyle, że ze stringa:

str = "Ala\nma\nkota";
po wykonaniu operacji Split('\n') (czyli "rozdziel mi tego stringa na tablicę stringów, gdzie znakiem rozdzielającym jest \n")
otrzymasz taką tablicę:

tab[0] = "Ala";
tab[1] = "ma";
tab[2] = "kota".

Kod powyżej robi wszystko. Ja Ci tylko wyjaśniam, dlaczego tak jest.

1 użytkowników online, w tym zalogowanych: 0, gości: 1