6

US_ENGLISH 標準キーボードのキー入力が与えられた場合に隣接するキーを提供できるライブラリ (できれば Java) を知っている人はいますか?

たとえば、文字 'd' を入力すると、[w、e、r、s、f、x、c、v] という文字が返されます。

あるいは、グリッド操作 API も機能します (qwerty キーボード レイアウトでグリッドをインスタンス化し、それを使用して隣人を見つけることができます)。

注 1: 私は「文字」と「キー」という言葉を同義語として文字を参照するために使用しています。

注 2: 50 ほどの主キーを隣接キーにマップする方法をハードコーディングできることはわかっています。より良い解決策を探しています。

ありがとうございました。

4

4 に答える 4

6

BlueNovember に同意しますが、より「数学的」なソリューションが必要な場合は、これを確認してください。最初に文字のグリッドを作成し、渡されたキーからの距離が 2 より小さいすべての文字を返します...ちょっと役に立たないですが、いい練習になります :)

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;
    }
}
于 2010-01-22T23:20:52.907 に答える
1

私はこれをあきらめて、どのキーが適切に隣接しているかをユーザーに選択させました。このプロジェクトでは、 はenum Key各コマンドを に関連付けkeyCodeます。このダイアログにより、ユーザーはマッピングを変更できます。結果は に保存されPreferencesます。

于 2010-01-22T23:04:43.160 に答える
0

注2よりも優れた解決策があれば驚くでしょう。

これでないとしたら、ライブラリはその下で何をしているでしょうか? キーには、構築できる相互の関係はありません。

于 2010-01-22T23:13:02.707 に答える
0

これを行うときは注意してください。たとえば、D の隣には ZERSFXCV があり、フランスにいる場合は WERSFXCV ではありません。ドヴォルザークを使うならYFGIHXBMです。トルコにいる場合は、567ORUTK かもしれません。

于 2010-01-23T02:10:38.130 に答える