Wyciąganie z pliku tekstowego słów z nieznaną literą

0

Mam pytanie. Czy w Javie możliwe jest wyciąganie z pliku tekstowego (słownika), słów z nieznaną literą? Żeby podając ciąg znaków np. "ko?ec", otrzymać słowa "kojec" i "kolec".

0

Tak, wyrażenia regularne.

0

Dzięki. No to będę miał co czytać przez dłuższy czas. Na razie zapoznawałem się głównie ze Stringami, ale widzę, że wyrażenia regularne to dla laika dużo trudniejszy temat. Jeśli nie masz nic przeciwko, to za jakiś czas pewnie będę miał do Ciebie dodatkowe pytania.

0

W przypadku pliku tekstowego udaje mi się wyciągać słowa z nieznaną literą. Teraz mam jeszcze pytanie, czy jest jakiś sposób, aby takie słowa wyciągać z ArrayList?

0
No raczej w taki sam sposób;p

ArrayList<String> lista = new ArrayList<>();
..... //wrzucenie do listy łańcuchów znaków

for(String temp : lista){
   //sprawdzasz tak jak w plikach tekstowych
}
0

A to jest jakaś różnica?

0

Musicie uwzględnić, że w temacie programowania jestem zielony jak szczypiorek.:) Poniżej wstawiam kod, którego końcowa część nie działa (wyciąganie z listy słów z nieznaną literą). Chciałem wyszukać w pliku tekstowym słowa z nieznaną literą, zapisać je do listy i następnie z tej listy jeszcze raz wyciągnąć słowa, tym razem z inną nieznaną literą. Pewnie zrobiłem wiele głupich błędów, z powodu wskazanego w pierwszym zdaniu. Pomożecie? :)

public class Proba_1 
{
	  public static void main(String[] args) throws IOException 
	  {
          Scanner zKlawiatury1 = new Scanner(System.in);
 	  System.out.println("Podaj szukane słowo:");
          String szukanyTekst1_01 = zKlawiatury1.nextLine();
          String szukanyTekst1 = "^"+szukanyTekst1_01+"$";
		  
          ArrayList<String> lista1 = new ArrayList<String>();
		  
	        File txt = new File("D:/Testy/slownik.txt");
	        try 
	        {
	            BufferedReader odczytaj = new BufferedReader(new FileReader(txt));
	            String line1 = "";
	            
	            while ((line1 = odczytaj.readLine()) != null) 
	            {
	                Matcher m1 = Pattern.compile(szukanyTekst1).matcher(line1);
	                while (m1.find()) 
	                {
	                    System.out.println("Szukane słowo: "+line1);
	                    lista1.add(line1);
	                }
	            }
	            	                    
	            System.out.print("Elementy lista1 to: "+lista1);  
	            	            
	        }
	        catch (IOException e) 
	        {
	            e.printStackTrace();
	        }
	        
	        
	        Scanner zKlawiatury2 = new Scanner(System.in);
	        System.out.println("");
	 	System.out.println("Podaj szukany wyraz z lista1:");
	 	String szukanyWyraz1_01 = zKlawiatury2.nextLine();
	 	String szukanyWyraz1 = "^"+szukanyWyraz1_01+"$";
	        	
	 	for(String temp : lista1)
	 	{
	 			
	 	File txt2 = new File(temp);
	        try 
	 	    {	 
			BufferedReader odczytaj2 = new BufferedReader(new FileReader(txt2));
	 		String line2 = "";
	 		                        
	 		while ((line2 = odczytaj2.readLine()) != null) 
	 		{
	 		Matcher m2 = Pattern.compile(szukanyWyraz1).matcher(line2);
	 		while (m2.find()) 
	 		{
	                 System.out.println("Szukane słowo: "+line2);
	 		}
	        
	 		}
	 	   }
	                catch (IOException e) 
	                {
	                  e.printStackTrace();
	                }
	 	}  
	    }
	}
0

ArrayList<string> lista1 = new ArrayList<string>();

powinno być String zamiast string.
Druga sprawa, masz memory leak warningi pewnie przy BufferedReader, przy try/catch dodaj jeszcze blok finally i zamykaj bufferedReadery.

0

String miałem z dużej litery. Dzięki za pozostałe sugestie, ale główny problem chyba jest gdzie indziej. M.in. wywala komunikat: "Nie można odnaleźć określonego pliku".

Podaj szukane słowo:
ko.ec
Szukane słowo: kojec
Szukane słowo: kolec
Elementy lista1 to: [kojec, kolec]
Podaj szukany wyraz z lista1:
k.jec
java.io.FileNotFoundException: kojec (Nie można odnaleźć określonego pliku)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at Proba_1.main(Proba_1.java:68)
java.io.FileNotFoundException: kolec (Nie można odnaleźć określonego pliku)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at Proba_1.main(Proba_1.java:68)

0

Że tak spytam: ty tak poważnie? Nie nauczyli w podstawówce czytać? o_O

java.io.FileNotFoundException: kojec (Nie można odnaleźć określonego pliku)

Patrzymy w kod i co?

File txt2 = new File(temp);

no to sprawdzamy czym jest temp (btw doskonała nazwa, nobla powinieneś za nią dostać...)

for(String temp : lista1)

to juz nie wygląda dobrze bo nigdzie nie pisałeś że masz gdzieś LISTĘ PLIKÓW, ale co tam, patrzymy dalej, czym jest lista1 a tu się okazuje że to zwykła lista "pasujących" słów z poprzedniego wywołania.
No to teraz powiedz mi, czemu próbujesz słowa z pliku traktować jako nazwy plików? Bo ja widzę tylko jedno rozwiązanie: zupełnie nie rozumiesz tego kodu i próbowaleś skopiować kawałek i "przerobić" ale nie wyszło...

0

Przeczytać komunikat błędu to nie to samo, co znaleźć rozwiązanie.
Stawiasz prawidłową diagnozę. Chyba czytałeś posty wyżej, tam jasno napisałem, że nie znam się na programowaniu. Faktycznie słabo rozumiem drugą część kodu (odczytywanie z ArrayList) i sugerowałem się podpowiedziami powyżej. Podpowiesz, czy muszę sam dojść do rozwiązania problemu?

0

Musisz sam dojść. Ale polecam użyć do tego mózgu, tzn spróbować zrozumieć co robisz. Nie da się programować za pomocą losowych permutacji kodu. To tak jakbyś chciał rozwiązać równanie matematyczne przez dopisywanie losowych równań. Kiedyś trafisz na "poprawną" permutację, ale wątpię żebyś miał tyle czasu...

0

Wielkie dzięki za pomoc. Oczywiście po poświęceniu mnóstwa czasu zrozumiem co robię. Tylko ten programik w moim przypadku jest jednorazowym incydentem z programowaniem i prawdę mówiąc, trochę mi tego czasu szkoda (wiedząc, że prawdopodobnie nie będzie mi to więcej potrzebne).

0

Shalom, jednak wystarczyło czasu - udało się. Wystarczyły drobne zmiany kodu. Wiem, że może irytować Cię moja niewiedza, ale nie jestem Twoim wrogiem i nie rozumiem tych uszczypliwości. Myślę, że Ty także nie kończyłeś studiów na kierunkach, z którymi nie zamierzasz wiązać się w przyszłości. To trochę tak, jakby lekarz miał pretensje do pacjenta, że nie zna się na medycynie. Mimo wszystko pozdrawiam.

0

To trochę tak, jakby lekarz miał pretensje do pacjenta, że nie zna się na medycynie

Nie do końca. To tak jakby student ratownictwa medycznego albo pielęgniarstwa przyszedł do lekarza i wypytywał go o to jak diagnozować chorobę XYZ, bo jest zbyt leniwy żeby przeczytać podręcznik a potrzebne mu to na studia. I jeszcze twierdził, że przecież jemu to nie jest potrzebne bo nie chce być lekarzem i miał pretensje że lekarz do którego przyszedł nie był zachwycony wizytą.

0

Tylko, że mnie ten programik nie jest potrzebny ani na studiach, ani w szkole, tylko do celów prywatnych, a dokładnie hobbystycznych (muszę go jeszcze dość mocno rozbudować). W każdym razie z mojej strony - "pokój".:) Nie będziemy wątkami pobocznymi zaśmiecać forum, które przeznaczone jest dla poważniejszych spraw.

0

To jeszcze gorzej. Przyszedłeś do lekarza pytać jak diagnozować XYZ bo jesteś wioskowym znachorem...

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