键盘布局库,用于查找给定输入键的相邻键(最好是java)

键盘布局库,用于查找给定输入键的相邻键(最好是java),java,api,keyboard,keyboard-layout,Java,Api,Keyboard,Keyboard Layout,有谁知道有一个库(最好是java)可以为我们的英语标准键盘输入一个键,然后给我相邻的键 例如,如果我输入字符“d”,我应该返回以下字符:[w、E、r、s、f、x、c、v] 或者,网格操作api也可以工作(这样我就可以用qwerty键盘布局实例化一个网格,并使用它来查找我的邻居) 注1:我使用“字符”和“键”同义词来指代字符 注2:我知道我可以硬编码一个方法,将大约50个主键映射到它们的邻居。我正在寻找更好的解决办法 谢谢。我放弃了这一点,让用户选择适当相邻的键。在这种情况下,an将每个命令与关联

有谁知道有一个库(最好是java)可以为我们的英语标准键盘输入一个键,然后给我相邻的键

例如,如果我输入字符“d”,我应该返回以下字符:[w、E、r、s、f、x、c、v]

或者,网格操作api也可以工作(这样我就可以用qwerty键盘布局实例化一个网格,并使用它来查找我的邻居)

注1:我使用“字符”和“键”同义词来指代字符

注2:我知道我可以硬编码一个方法,将大约50个主键映射到它们的邻居。我正在寻找更好的解决办法


谢谢。

我放弃了这一点,让用户选择适当相邻的键。在这种情况下,an将每个命令与关联,并允许用户更改映射。结果保存在中。

如果有比注释2更好的解决方案,我会感到惊讶


如果不是这样,图书馆会在下面做什么?键之间没有任何关系,您可以从中构建

我同意蓝十一月,但如果你想要一个更“数学”的解决方案,请检查这个。首先创建一个字符网格,然后返回距离传递的键小于2的所有字符。。。有点没用,但这是一个很好的练习:)

公共类测试{
静态字符串chars=“qwertyuiopasdfghjkl;zxcvbnm,.”;
公共静态void main(字符串[]args){
System.out.println(getneighborringkeys('f'));
System.out.println(getneighborringkeys('u'));
System.out.println(getneighborringkeys('m'));
System.out.println(getneighborringkeys('q'));
}
公共静态字符串GetNeighborringKeys(字符键){
StringBuffer结果=新的StringBuffer();
for(char c:chars.toCharArray()){

如果(c!=key&&distance(c,key)在执行此操作时要小心。例如,如果您在法国,D旁边是ZERSFXCV,而不是WERSFXCV。如果您使用德沃夏克,则是YFGIHXBM。如果您在土耳其,则可能是567ORUTK。

我在考虑一个库,该库针对不同的语言环境返回不同的结果(例如,美国英语/法语)或键盘类型(如DVORAK/QWERTY)。很公平。您的问题确实明确指出了我们的英语。语言环境会有问题;如果我作为使用英国语言环境的英国键盘用户,将语言环境设置为我们,我的\键仍在同一位置,但操作系统会将其视为来自美国键盘的\键,位于键盘的其他位置。谢谢。GetNeighborringKeys方法可能是optimi但是zed需要做更少的操作。优化会产生太小的性能提升,无法证明需要额外的时间来尝试和优化。我的意思是网格中只有80个左右的键,你很少这样称呼。但是如果你这样做,请做我的嘉宾并发布优化版本:)是的,这就是为什么我想使用图书馆的原因。
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;
    }
}