九宫格按键输入
题目描述
九宫格按键输入,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母,如果输入""或者其他字符,则循环中断,输出此时停留的字母。数字和字母的对应关系如下,注意0只对应空格:
输入一串按键,要求输出屏幕显示1.#用于切换模式,默认是数字模式,执行 #后切换为英文模式;2./表示延迟,例如在英文模式下,输入 22/222,显示为 bc,数字模式下/没有效果,3.英文模式下,多次按同一键,例如输入 22222,显示为b;输入描述
输入范围为数字 o~9 和字符"#’、",输出屏幕显示,例如:在数字模式下,输入 1234,显示1234在英文模式下,输入 1234,显示,adg输出描述
输出屏幕显示的字符
示例1
输入
2222/22
输出
222222
说明
默认数字模式,字符直接显示,数字模式下/无序
示例2
输入
#2222/22
输出
ab
说明
#进入英文模式,连续的数字输入会循环选择字母,!直至输入/,故第一段2222输入显示a,第二段22输入显示b
示例3
输入
#222233
输出
ae
说明
#进入英文模式,连续的数字输入会循环选择字母,直至输入其他数字,故第一段2222输入显示a,第二段33输入显示e
题解
对输入进行分段,然后逐个解析输入
源码
import java.util.*;
public class NineKeyBoard2 {
static Input input;
static Map<Character, char[]> map = new HashMap<>();
static {
input = new Input("#2222/22");
map.put('1', new char[]{',','.'});
map.put('2', new char[]{'a','b', 'c'});
map.put('3', new char[]{'d', 'e', 'f'});
map.put('4', new char[]{'g', 'h', 'i'});
map.put('5', new char[]{'j', 'k', 'l'});
map.put('6', new char[]{'m', 'n', 'o'});
map.put('7', new char[]{'p', 'q', 'r', 's'});
map.put('8', new char[]{'t', 'u', 'v'});
map.put('9', new char[]{'w', 'x', 'y', 'z'});
map.put('0', new char[]{' '});
}
public static void main(String[] args) {
String string = input.nextLine();
List<String> list = new ArrayList<>();
for (int i = 0; i < string.length(); i++) {
if (Character.isDigit(string.charAt(i))) {
int left = i;
int right = i + 1;
while (right < string.length() && string.charAt(left) == string.charAt(right)) {
right++;
}
String temp = string.substring(left, right);
i = right - 1;
list.add(temp);
} else {
list.add(string.charAt(i) + "");
}
}
String result = "";
boolean numberModel = true;
for (int i = 0; i < list.size(); i++) {
if ("#".equals(list.get(i))) {
numberModel = !numberModel;
} else if ("/".equals(list.get(i))) {
} else {
result += getTypingChar(list.get(i), numberModel);
}
}
System.out.println(result);
}
public static String getTypingChar(String string, boolean numberModel) {
if (numberModel) {
return string;
}
char[] chars = map.get(string.charAt(0));
return chars[(string.length() - 1) % chars.length] + "";
}
}