package findinfiles;
import java.io.*;
public class Finder{
	//3ICE: So much code repetition everywhere... Terrible! Oh well...
	public static void printFile(String filePath) throws IOException{
		try{
			BufferedReader r = new BufferedReader(new FileReader(new File(filePath)));
			for(String line = r.readLine(); line != null; line = r.readLine()) {
				System.out.println(line);
			}
			r.close();
		}catch(FileNotFoundException e){
			System.err.println("Error: Target file \""+filePath+"\" cannot be found.");
		}
	}

	public static boolean findText(String lineToFind, String filePath) throws IOException{
			BufferedReader r = new BufferedReader(new FileReader(new File(filePath)));
			for(String line = r.readLine(); line != null; line = r.readLine()) {
				if(line.equals(lineToFind))return true;
			}
			r.close();
			return false;
	}
//3ICE: Javasolt a következo használata:
/* regionMatches(int toffset, String other, int ooffset, int len): String metódusa, teszteli, hogy az adott String toffset pozíciójától nézett része len karakter hosszan egyezik-e a paraméterben átadott szöveg ooffset pozíciójától nézett részével.*/
//3ICE: Én inkább a sokkal egyszerubb .contains() metódust használtam:
	public static boolean findText2(String textToFind, String filePath) throws IOException{
			BufferedReader r = new BufferedReader(new FileReader(new File(filePath)));
			for(String line = r.readLine(); line != null; line = r.readLine()) {
				if(line.contains(textToFind))return true;
			}
			r.close();
			return false;
	}
//3ICE: Segítség:
/* Keressünk a java szabványkönyvtár dokumentációjában egy megfelelo túlterhelést a regionMatches-re */
//3ICE: Az a boolean ignoreCase lenne:
//public boolean regionMatches(boolean ignoreCase,int toffset,String other,int ooffset,int len)
//3ICE: Én inkább megdobtam egy toLowerCase() hívással mindkettot.
	public static boolean findText3(String textToFind, String filePath) throws IOException{
		textToFind=textToFind.toLowerCase();
			BufferedReader r = new BufferedReader(new FileReader(new File(filePath)));
			for(String line = r.readLine(); line != null; line = r.readLine()) {
				if(line.toLowerCase().contains(textToFind))return true;
			}
			r.close();
			return false;
	}
	/** Szorgalmi: Legyen arra lehetoség, hogy egész szavakra keressünk (findText4). Az a karaktersorozat számít szónak, amely elött és után olyan karakter van, ami nem betu (de figyeljünk arra, hogy sor elején is kezdodhet és sor végén is végzodhet szó). Ehhez használjuk a Character és a String osztály metódusait. */
	public static boolean findText4(String wordToFind, String filePath) throws IOException{
			BufferedReader r = new BufferedReader(new FileReader(new File(filePath)));
			String[] words;
			for(String line = r.readLine(); line != null; line = r.readLine()) {
				words = line.split("\\W+");
				for(String word : words){
					//System.out.println("\t"+word);
					if(word.equals(wordToFind))return true;
				}
			}
			r.close();
			return false;
	}
}