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
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
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.
}
}
}
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.