2010-01-22 6 views
6

Czy ktoś wie o bibliotece (najlepiej java), która może dać mi sąsiednie klucze, biorąc pod uwagę klucz do standardowej klawiatury US_POLISH?Biblioteka Układ klawiatury, aby znaleźć Sąsiednie klucze, podając klucz wejściowy (najlepiej java)

E.g. jeśli wprowadzę znak "d", powinienem otrzymać następujące znaki: [w, e, r, s, f, x, c, v].

Może również działać api z obsługą siatki (aby utworzyć instancję siatki z układem klawiatury qwerty i użyć jej do znalezienia moich sąsiadów).

Uwaga 1: Używam słów "znak" i "klucz" jako synonimiczny w odniesieniu do znaków.

Uwaga 2: Wiem, że potrafię zakodować metodę mapowania 50 podstawowych kluczy do swoich sąsiadów. Szukam lepszego rozwiązania.

Dziękuję.

Odpowiedz

6

Zgadzam się z BlueNovember, ale jeśli chcesz bardziej "matematycznego" rozwiązania, sprawdź to. Najpierw trzeba stworzyć siatkę znaków, a następnie powrócić wszystkie z nich, że ma dystans mniejszy niż 2 z klucza przeszedł ... Kinda bezużyteczny, ale jest to miły ćwiczeń :)

public class Test { 

    static String chars = "qwertyuiopasdfghjkl;zxcvbnm,."; 

    public static void main(String[] args) { 
     System.out.println(getNeighboringKeys('f')); 
     System.out.println(getNeighboringKeys('u')); 
     System.out.println(getNeighboringKeys('m')); 
     System.out.println(getNeighboringKeys('q')); 
    } 

    public static String getNeighboringKeys(char key) { 
     StringBuffer result = new StringBuffer(); 
     for (char c : chars.toCharArray()) { 
      if (c!=key && distance(c,key)<2) { 
       result.append(c); 
      } 
     } 
     return result.toString(); 
    } 

    public static double distance(char c1, char c2) { 
     return Math.sqrt(Math.pow(colOf(c2)-colOf(c1),2)+Math.pow(rowOf(c2)-rowOf(c1),2)); 
    } 

    public static int rowOf(char c) { 
     return chars.indexOf(c)/10; 
    } 

    public static int colOf(char c) { 
     return chars.indexOf(c) % 10; 
    } 
} 
+0

Dzięki. Metoda getNeighboringKeys może być zoptymalizowana do wykonywania mniejszych operacji. – hashable

+0

Optymalizacja spowodowałaby zbyt mały wzrost wydajności, aby usprawiedliwić dodatkowy czas na jej optymalizację. Mam na myśli, że w sieci jest tylko 80 kluczy mniej i rzadko to się nazywa. Ale bądź moim gościem i opublikuj zoptymalizowaną wersję, jeśli to zrobisz :) –

1

Poddałem się temu i po prostu pozwoliłem użytkownikowi wybrać, które klucze są do siebie przyległe. W tym project jedno polecenie odnosi się do keyCode, a this dialog pozwala użytkownikowi zmienić mapowanie. Wynik zostanie zapisany w Preferences.

0

byłbym zaskoczony, jeśli nie jest to rozwiązanie lepsze niż nocie 2.

Co biblioteka robić spodu, jeśli nie to? Klucze nie mają ze sobą żadnego związku, z którego możesz zbudować.

+0

Myślałem o bibliotece, która zwraca inny wynik dla innego LOCALE (np. US_ENGLISH/FRENCH) lub typu klawiatury (np. DVORAK/QWERTY). – hashable

+1

Wystarczająco fair. Twoje pytanie dotyczy konkretnie US_ENGLISH. Lokalizacja będzie problematyczna; jeśli ja, jako użytkownik klawiatury brytyjskiej z brytyjskim ustawieniem narodowym, ustawiam locale na US, mój \ klucz jest nadal w tym samym miejscu, ale system operacyjny zobaczy go jako \ z amerykańskiej klawiatury, która jest gdzie indziej na klawiaturze. – RJFalconer

0

Bądź ostrożny, kiedy to zrobić . Na przykład obok D są ZERSFXCV, a nie WERSFXCV, jeśli jesteś we Francji. A jeśli używasz Dvoraka, to jest to YFGIHXBM. Jeśli jesteś w Turcji, może to być 567ORUTK.

+0

Tak. Właśnie dlatego chciałem użyć biblioteki, jeśli istniała. – hashable

Powiązane problemy