Wątek przeniesiony 2017-09-13 05:59 z Java przez bogdans.

Powtórzenie przeszukiwania pliku txt poprzez Scanner

0

Cześć od kilku dni zmagam się z tym problemem i potrzebuję pomocy. Moja aplikacja jest w GUI, jeden jTextField i jeden JButton, chodzi po porstu o przeszukiwanie pliku txt w celu znalezienia wpisanego w pole tekstowe słowa. Moja aplikacja działa ale...niestety tylko raz, skan.hasNextLine() przechodzi raz przez txt i po ponownym wypełnieniu pola tekstowego innym wyrazem już nie szuka, Szperałem po różnych forach, próbowałem różnych kombinacji i różnuch przykładów ale brakuje mi umiejętności żeby to zrobić. Dowiedziałem się że Scanner nie można tak po porostu zresetować, poprzez skan.reset(); bo nic to nie da, i potrzebny jest drugi Scanner, zrobiłem go ale wciąż ten sam problem, przeszukiwanie jest tylko raz. Jest ktoś w stanie mi pomóc z tym? Poniżej kawałek kodu, jest on zbyt duży około 400 lini żeby cały wkleić.

String slowoZle, txt;
FileInputStream fis = new FileInputStream("jeden.txt");
Scanner skan = new Scanner(fis);
else if(zrodlo==bSzukaj){

slowoZle = tWyszukaj.getText();

    while (skan.hasNextLine()){

        txt = skan.nextLine();
        if (txt.equals(slowoZle)){
            lWynik_wyszukania.setText("Znaleziono");

      }
        else{

               lWynik_wyszukania.setText("Nie znaleziono");

        }  

    }
2

Ten kod jest raczej bez sensu, jeśli szukanego słowa nie ma w ostatnim wierszu pliku, to wyświetlony zostanie komunikat Nie znaleziono.

        if (txt.equals(slowoZle)){
            lWynik_wyszukania.setText("Znaleziono");
            break;
      }
0

tak, dokładnie tak. Chodzi o to aby użytkownik mógł sprawdzić czy podane słowo istnieje w txt czy nie. Jeżeli nie ma szukanego słowa i wyświetlony będzie komunikat "Nie znaleziono", wtedy użytkownik powinien mieć możliwość ponownie wpisać szukane słowo, ale jak wspomniałem ten kod szuka tylko raz i nie mam niestety umiejętności żeby zmusić go do ponownego wyszukiwania ;/

1

Dopisałeś break? Bez tego wiersza, jeżeli plik wygląda tak:

jestem
mały
miś

a szukane jest słowo mały pojawi się komunikat Nie znaleziono.

0

kurcze miałeś rację bogdans, całkowitą! myślałem że kod wyszukuje poprawnie bo za każdym razem w sumie w pole tekstowe podawałem słowo "Pinokio", a teraz patrzę i wydawało mi się że kod działa, ponieważ wyświetlał komunikat "Znaleziono" i słowo "Pinokio" tylko dlatego że to Pinokio było ostatnim słowem w txt pliku. Jeszcze raz Ci dziękuję, dodałem break; i faktycznie teraz szuka poprawnie, ale mógłbyś mi pomóc zrozumieć jak ponowić wyszukiwanie? Męczę się z tym już 3 dzień i jestem w kropce ;/

1
  1. Wczytaj wiersze plik do kolekcji i przeszukuj tę kolekcję.
  2. Przed każdym szukaniem twórz nowy scanner i zamykaj go po szukaniu.
1

Ja bym pliku nie buforował. Po prostu na każde żądanie szukania tworzę nowy stream i nowy skaner. Niech system operacyjny bawi się w buforowanie plików.

0

Nie wiem co nazywasz buforowaniem. Jeżeli szukane będą tylko słowa (bez spacji) w środku), to utworzenie na starcie uporządkowanej kolekcji słów znacznie zwiększy wydajność.

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