以编程方式在键盘左侧获取一个字符

时间:2017-07-09 19:21:48

标签: java algorithm data-structures

在键盘中,如果我有一个字符'v'(小型大写字母)的ASCII代码,那么我该如何获得java中留给它的字符的ASCII值?也就是说,例如我的'v'的ASCII值为118,现在按照标准的qwerty键盘,'v'左边的字符是'c'。如何在Java中实现这一点?有什么想法吗?

假设'm'在'z'的左边,它总是小的。

假设我有这样的功能:

String oneLeft(String s) { }

我想得出的结论是,在保留QWERTY键盘的情况下,将一个角色显示给角色。

3 个答案:

答案 0 :(得分:2)

这是一种方法,只需使用String作为keyboard的定义:

public static char oneLeft (char s)
{
    // note the wrap-around chars ('p', 'l', 'm')
    final String keyboard = "pqwertyuioplasdfghjklmzxcvbnm"; 

    // use lastIndexOf to not conflict with wrap-around chars
    int index = keyboard.lastIndexOf(s); 

    return (index > 0) ? keyboard.charAt(index - 1) : s;
}

<强>用法

System.out.println(oneLeft('v')); // prints c
System.out.println(oneLeft('z')); // prints m
System.out.println(oneLeft('9')); // prints 9

System.out.println(oneLeft('P')); // prints P

答案 1 :(得分:2)

对于非常快速的查找(您不需要,但为了学习一些有趣的东西),您可以创建一个字符数组,其偏移量是您要查找的字符。 ASCII小写字符在97到122的范围内,因此新的字符[123](或新字符[&#39; z&#39; +1])将适合您的所有字母加上一些未使用的空格。

所以,你想创建一个数组,例如cCrypt = f [cPlain];

用手指在键盘上进行操作,为每一行创建三个字符串,您已经指出,每个字符串单独包裹(例如,&#39; m&#39;留下&#39; z&#39 ):

public class DickTracyRing {

    public static void main(String[] args) {
        char[] encoder=new char['z'+1];
        fill(encoder, "qwertyuiop");
        fill(encoder, "asdfghjkl");
        fill(encoder, "zxcvbnm");
        System.out.println(encode("my message", encoder));
    }

    private static String encode(String str, char[] lookup) {
        char[] text=str.toCharArray();
        for (int i=0; i<text.length; i++) {
            if (text[i]>='a' && text[i]<='z') text[i]=lookup[text[i]];
        }
        return new String(text);
    }

    private static void fill(char[] lookup, String row) {
        char[] crow = row.toCharArray();
        for (int i = 0; i < crow.length; i++) {
            lookup[crow[i]] = crow[(crow.length-1+i)%crow.length];
        }
    }
}

编码的输出(&#34;我的消息&#34;,编码器)是nt nwaaldw

答案 2 :(得分:1)

JDK中没有任何内容,但最简单的是地图:

private static final Map<Character, Character> LEFT_KEYS = new HashMap<Character, Character>() {{
    put('v', 'c');
    put('w', 'q');
    // etc for all keys that have keys to the left
}};

然后在代码中:

char key; // read from wherever
Character left = LEFT_KEYS.get(key); // could be null