Porównywanie stringów

0

Witam!
Mam za zadanie napisać konsolę tekstową do gry w java, no wiecie taka w której wydaje się polecenia typu "Idź w lewo" itd.
Wszystko poszło bez problemu i mam minimum czyli odczytywanie jako stringa wprowadzonego polecenia przez gracza i wyświetlenie komunikatu np. "Idę w lewo"/"Nie zrozumiałem polecenia".
Teraz chciałbym to trochę rozbudować. Aktualnie polecenie jest rozpoznane jeżeli użytkownik wpisze 100% identyczne do konsoli (może jedynie wpisać różną wielkość liter, bo używam funkcji lowercase). A samo szukanie wygląda tak:

public boolean inArray(String in,String[] str){
		boolean match=false;
		for(int i=0;i<str.length;i++){
			if(str[i].equals(in)){
				match=true;}

Chcę by konsola, wyszukała polecenie nawet gdy gracz wprowadzi je trochę inaczej/popełni drobny błąd przy wpisywaniu. Wymyśliłem tylko coś takiego:

public boolean inArray(String in,String[] str){
		boolean match=false;
		for(int i=0;i<str.length;i++){

			if(str[i].compareToIgnoreCase(in)>=-2&&str[i].compareToIgnoreCase(in)<=2){
				match=true;
			}
		}
		return match;
	}

Jednakże funkcja compareTo zwróci mi małe wartości tylko gdy stringi różnią się końcowymi znakami, wystarczy jeden inny znak na początku i mam 10/-10. Tak więc działa to gdy wpiszę "Idź w lew" zamiast "Idź w lewo" jednak jak wpiszę "Idś w lewo" to klapa.

Proszę o pomoc, bo sam już nie mam pomysłów...

0

Może prymitywnie, może źle, ale ja bym to zrobił w ten sposób że albo bym stworzył tablicę pomyłek (ale trudno przewidzieć gdzie i jak się użyszkodnik pomyli)
albo drugi sposób to porównanie stringa prawidłowego do tego wpisał user, jeśli string różni się tylko jednym lub dwoma znakami to przyjmuje polecenie. A jeśli więcej błędów to odrzuca polecenie

1
  1. Odległość edycyjna -> odległośc levenshteina
  2. Stemming/lematyzacja + cosine similarity
1

Ja bym sprawdzał tylko słowa kluczowe takie jak lewo, prawo, albo jeszcze lepiej ich skróty:

if(in.indexOf("le")!=-1){
      System.out.println("Idę w lewo.");
}

Możesz także stworzyć tablice przypadków i na podstawie jej sprawdzać czy jeden z kluczy pasuje do wpisanych fraz:

String slowa_klucz[]={"le","lw","lr","ls"};
for(int i=0;i<slowa_klucz.length;i++){
    if(in.indexOf(slowa_klucz[i])!=-1){
         System.out.println("Idę w lewo.");
    }
}

Jeśli chcesz bardziej skomplikowanie to możesz także sprawdzać czy części poszczególnych słów znalazły się w wpisanej frazie:

if(in.indexOf("le")!=-1 && in.indexOf("idz")!=-1){
     System.out.println("Idę w lewo.");
}

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