C# : Metin İçinde Metin Arama – 1

Belirli bir metin içinde kelime ya da karakter arama, şifreleme algoritmalarında,uzun metinlerde kelime bulmak ya da belli bir konuma gelmek için sıklıkla kullanılır. Programla yapılmak istenen kullanıcıdan alınan kelimenin, verilen metinde ya da okunan dosyadaki metinde kaç adet olduğunu bulmaktır.

Kullanıcıdan alınan ve dosyadan okunan metin arasında kelime aramanın mantığı aynıdır. Burada yararlanılan IndexOf() metodu bize istenen kelimenin olup olmadığını döndürür. Eğer yoksa -1 değeri döndürecektir. sayac değişkeni bulunduğu takdirde 1 arttırılarak kaç kelimenin kaç adet olduğunu gösterecektir.

int konum = sifre.IndexOf(sifre);
while (konum != -1)
{
konum = kelime.IndexOf(sifre, konum + 1);
sayac++;
}

Eğer dosyadan okutmak isteniyorsa ek olarak dosyanın yerini belirtecek ve okuma yapacak StreamReader nesnesine ihtiyaç vardır. Aşağıdaki satırlarla str adlı bir nesne oluşturularak C dizinindeki metin adlı belgeye ulaşıldı. ReadLine() metodu ile oku adlı string değişkenine atandı.

string oku;
StreamReader str = new StreamReader("c:\\metin.txt");
Console.WriteLine("Aranmak istenen kelime?");
kelime = Console.ReadLine();
oku = str.ReadLine();

Programın tüm kodları ise şöyle;

int secim;
String sifre,kelime;
int sayac = 0;
Console.WriteLine("Metin girmek icin 1'e, dosyadan okutmak icin 2'ye basiniz:");
secim = Convert.ToInt32(Console.ReadLine());
switch (secim)
{
case 1:
Console.WriteLine("Sifreyi giriniz:");
sifre = Console.ReadLine();
Console.WriteLine("Aranmak istenen kelime?");
kelime = Console.ReadLine();
int konum1 = kelime.IndexOf(sifre);
while (konum1 != -1)
{
konum1 = kelime.IndexOf(sifre, konum1 + 1);
sayac++;
}
break;
case 2:
string oku;
StreamReader str = new StreamReader("c:\\metin.txt");
Console.WriteLine("Aranmak istenen kelime?");
kelime = Console.ReadLine();
oku = str.ReadLine();
int konum2 = oku.IndexOf(kelime);
while (konum2 != -1)
{
konum2 = oku.IndexOf(sifre, konum2 + 1);
sayac++;
}
break;
}
Console.WriteLine("Metin icerisinde"+sayac+"tane bulunmustur.");
Console.ReadLine();
}