Wyszukiwanie wyrazów w tekście i wypis do pola.

0

Witam, tworzę słownik hiszpańsko-polski i mam problem z napisaniem metody. Chciałbym aby wczytywała plik do bufora, pobierała wyraz z pola, wyszukiwała ten sam wyraz w pliku, ale wypisała do stringu to co znajduje się po znaku "=". Jeśli ten fragment to za mało wrzucę resztę. Będę wdzięczny za naprowadzenie jak to mogę zrobić.

private void esppol() {
		FileReader plik = null;
		try {
			plik = new FileReader("esp-pol.txt");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String szukane = ta1.getText();
		StringBuffer odczyt;
		
			Scanner skaner = new Scanner(plik);
		while(skaner.hasNext())
			odczyt.equals(szukane);
			
			ta2.setText(odczyt);
	
		} 
1

Na pewno nie najladniej ani najoptymalniej, ale bedzie dzialac. BufferedReader bo umie czytac cala linie, a wiesz ze cala linia na pewno ma 2 slowa oddzielone "=". Wiec czytasz linie, splitujesz po "=" i biezesz drugi wyraz - to co bylo po "=".

public String findTranslation(String word) throws Exception {
        BufferedReader fileReader = new BufferedReader(new FileReader(new File("D:\\my.txt.txt")));
        String readLine = fileReader.readLine();
        while(readLine != null)
        {
            if(readLine.contains(word)){
                String[] line = readLine.split("=");
                return line[1];
            }
            readLine = fileReader.readLine();
        }
        throw new Exception("Word not found");
    }
}
0

Staram się zrobić coś na ten wzór, ale aplikacja się zawiesza, żadnych błędów w konsoli nie mam

private void polesp() {
		BufferedReader fileReader = null;
		try {
			fileReader = new BufferedReader(new FileReader(new File("pol-esp.txt")));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        String readLine = null;
		try {
			readLine = fileReader.readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        String tekst = ta1.getText();
        while(readLine != null)
        {
            if(readLine.contains(tekst)){
                String[] line = readLine.split("=");
                ta2.setText(line[1]);
            } 
0

Spojrz na petle while(warunek).

String readLine = null;
        try {
 //1           readLine = fileReader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String tekst = ta1.getText();
 //2   while(readLine != null)
        {
            if(readLine.contains(tekst)){
                String[] line = readLine.split("=");
                ta2.setText(line[1]);
        }  

Zaczytujesz sobie linie ze swojego pliku. Przypusmy ze ona tam jest i zostala znaleziona //1
Teraz biezesz tekst ze swojego textFielda.
Wchodzimy do petli bo warunek /2 jest prawda, tam sie cos dzieje i nastepuje kolejny obrot petli. Sprawdzamy warunek i znowu /2 jest prawda, bo readLine w ogóle sie nie zmienilo i jest rozne od nulla, cos sie dzieje w petli i znowu kolejny obrot, znowu //2 jest prawda bo znowu wskazuje na ta sama linie. Podpowiem, caly czas to jest ta sama, pierwsza linia twojego pliku. Czego brakuje ?

0

Nie mogę się z tym uporać. Proszę o pomoc.

1

Problem masz taki ze program ci sie zapetla, wchodzisz do petli, i nie mozesz juz z niej wyjsc. A dlaczego nie mozesz z niej wyjsc ? Bo twoj warunek while(warunek) jest caly czas prawda. Musisz zrobic tak, zeby ten warunek sie zmienial w czasie wykonywania petli, inaczej bedziesz mial tak jak masz teraz, petla sie caly czas obraca i caly czas dla niej warunek jest prawdziwy i tak w nieskonczonosc. Twoja petla while powinna sie skonczyc kiedy albo w if() znalazles linie, ktora potrzebowales(mozesz tam dodac slowo break, ktore wychodzi z petli) albo wtedy kiedy jesli caly czas czytasz kolejne linie pliku dochodzisz do konca. Czyli w petli powinienes po kazdym obrocie, za ifemm wczytac nowa linie, a tego nie robisz. Wiec caly czas w twojej petli while masz jedna i ta sama linie.

0

Dziękuje pięknie za pomoc. Nie wiem jeszcze jak doprecyzować tę metodę, bo teraz wyszukuje wszystkie słowa z daną frazą. Próbuje coś w tę stronę, z tym, że trzeba to zapętlić, ale nawet w obecnej formie program się zawiesza :s

 String tekst = ta1.getText();
        while(czytajlinie != null)
        {
            if(czytajlinie.contains(tekst))
                {String[] baza = czytajlinie.split("=");
                	
            	Boolean porownanie = false;
                porownanie = baza[1].equalsIgnoreCase(tekst);
                	if (porownanie == true)
                		{
                		ta2.setText(baza[1]);
                		break;
             
                	}
0

Mozesz zrobic inaczej, zczytuj linie, rob od razu .split("=") i sprawdzaj czy baza[0] nie contains a equal to co chcesz.
W while dalej brakuje ci zaczytywania kolejnego wiersza, musisz nadpisac w srodku while swoja zmienna czytajLinie

1

czytasz linie raz w pierwszym try catchu, pozniej w petli na samym starcie czytasz jeszcze raz linie, wiec zamiast cokolwiek zrobic z pierwsza linia, chociaz sprawdzic czy zawiera slowo ktorego szukasz, od razu przeskakujesz do drugiej linii i zaczynasz szukanie od 2giej linii, nie moze tak byc. Do tego sprawdzasz czy CALA linia ktora przeczytales jest rowna szykanemu slowu, a ona nigdy nie bedzie, bo szukasz np slowa programista a sczytujesz z pliku programista=programmer. No i nie ma opcji zeby "programista".equals("programista=programmers"). Equalsem badasz po zrobieniu .split("=") i badasz to co jest przed "=", czyli baza[0]. NullPointerException poleciec moze np wtedy gdy czytasz pierwsza linie, ona nie jest nullem, wchodzisz do petli, zaczytujesz od razu druga linie i okazuje sie ze jest pusta, no i probujesz na niej cos zrobic i leci NullPointer. Najpierw musisz cos zrobic po zaczytaniu pierwszej linii zanim wezmiesz sie za druga.

0

Nie mam pomysłu co może być teraz źle, wydaje mi się, że zastosowałem się do wszystkich twoich porad. Program nic nie wpisuje w pole tekstowe.

private void angpol() {
		BufferedReader fileReader = null;
		try {
			fileReader = new BufferedReader(new FileReader(new File("ang-pol.txt")));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    String czytajlinie = null;
	try {
		czytajlinie = fileReader.readLine();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
    String tekst = ta1.getText();
    while(czytajlinie != null)
    {
        
    	 String[] baza = czytajlinie.split("=");
    	if(baza[0].equals(tekst)==true){
            ta2.setText(baza[0]);
            break;
        }
        
    	baza=null;
    	try {
			czytajlinie = fileReader.readLine();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }	
    try {
		fileReader.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
	}
}
0

w srodku ifa, do pola chcesz przypisac to co jest po "=" a nie przed, wiec nie baza[0] tylko ...
Zamiast tej nazwy pliku podaj sciezke absolutna a zamiast testFielda daj po prostu system.out.println zeby zobaczyc czy ci dobrze wyszukuje. Jesli znajdzie i wypisze to problem nie z kodem a z text fieldem. W ifie nie potrzebne jest to == true, equals zwraca true albo false

0

Nie wypisuje do konsoli, ale też nie ma żadnych błędów

private void angpol() {
		BufferedReader fileReader = null;
		try {
			fileReader = new BufferedReader(new FileReader(new File("C://users/xematos/desktop/eXc/projekt/ang-pol.txt")));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    String czytajlinie = null;
	try {
		czytajlinie = fileReader.readLine();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
    String tekst = ta1.getText();
    while(czytajlinie != null)
    {
        
    	 String[] baza = czytajlinie.split("=");
    	if(baza[1].equalsIgnoreCase(tekst)){
    		System.out.println(baza[1]);
            break;
        }
        
    	baza=null;
    	try {
			czytajlinie = fileReader.readLine();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }	
    try {
		fileReader.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
	}
}
0

w warunku if powinno byc baza[0] a w srodku ifa baza[1]. chcesz znalezc przed "=" a wypisac po "="
znowu wczytujesz linie przed while i w while zczytujesz od razu 2ga nie robiac nic z pierwsza.

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