Jak uzyc metody findInLine zeby odnalezc mieszany tekst(liczby i litery) w pliku txt? (Java)

0

Hej!
Mam taki problem. Mam dwa pliki txt i musze stworzyc program, ktory czyta obydwa i odnajduje wspolne elementy w tych plikach. Jeden plik(plik1) zawiera nazwy osob, ich adresy oraz numer karty. Drugi plik(plik2) zawiera numery kart (nie kazdego uzytkownika, tylko pare numerow kart ogolnie), nazwy artykulow i tam jescze z 2 inne rzeczy. Jeden z plikow (ten z ludzmi i ich adresami) posiada swoja klase dzieki ktorej moge zidentyfikowac kazda czesc tego pliku.

W programie stworzylam juz z pomoca Scannera opcje wczytywania obydwu plikow i tworzenie trzeciego, w ktorym zapisywane beda informacje o tych osobach, ktorych numery kart pojawiaja sie w obydwu plikach.

Proboje dopasowac pliki za pomoca findInLine, ale w ogole mi to nie idzie. Tzn dostaje ciagle* java.lang.illegalStateException: No match result available*. Jak rozumiem problem tkwi w tym, ze nie potrafie odpowiednio uzyc tej metody findInLine.

1 rzad w plik2 wyglada mniej wiecej tak:
numerkarty(3 cyfry)#nazwaartykulu#YYYYMMDD
Robie mniej wiecej tak:
sc1.findInLine("([0-9]{3})#(.+)#(.+)#([0-9]{8})");

Oba pliki testuje z pomoca podwojnego while sats tzn dopoki pierwszy plik ma rzad do czytania to..dopoki drugi plik ma rzad do czytania to...

Potem zamierzam porownac objekt z pliku pierwszego(numer karty) do k.group(1).

Nie wiem jak naprawic findInLine zeby dzialalo, pierwszy raz uzywam tego i widzialam jedynie jak sie uzywa probojac odszukac cyfry.

Dodatkowe informacje:

  • to delimeter tzn jest pomiedzy wszystkimi czesciami w pliku

  • numer karty zawiera 3 cyfry
  • nazwa artykulu zawiera nie raz spacje oraz inne znaki niz a-z
0

I pewnie wywołujesz jeszcze match(), o czym nie napisałaś. Ta metoda rzuca wyjątkiem, jeśli ostatnie dopasowanie findInLine() się nie powiedzie (zwróci null). A pewnie się nie powodzi, bo wejście w formacie:
numerkarty(3 cyfry)#nazwaartykulu#YYYYMMDD
próbujesz dopasować wzorcem:
([0-9]{3})#(.+)#(.+)#([0-9]{8})

  1. grupa ([0-9]{3}) to numer karty
  2. grupa ([0-9]{8}) to data
    i zostają dwie grupy, 2. i 3., z czego potrzebna jest tylko jedna do nazwy artykułu.

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