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();
    }   
    }
}

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