在键盘中,如果我有一个字符'v'(小型大写字母)的ASCII代码,那么我该如何获得java中留给它的字符的ASCII值?也就是说,例如我的'v'的ASCII值为118,现在按照标准的qwerty键盘,'v'左边的字符是'c'。如何在Java中实现这一点?有什么想法吗?
假设'm'在'z'的左边,它总是小的。
假设我有这样的功能:
String oneLeft(String s) { }
我想得出的结论是,在保留QWERTY键盘的情况下,将一个角色显示给角色。
答案 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