当前位置: 首页 > article >正文

九宫格按键输入

题目描述

九宫格按键输入,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母,如果输入""或者其他字符,则循环中断,输出此时停留的字母。数字和字母的对应关系如下,注意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] + "";
	}


}


http://www.kler.cn/a/382192.html

相关文章:

  • Linux 基本使用和程序部署
  • Android修行手册 - 移动端几种常用动画方案对比
  • 移动网络(2,3,4,5G)设备TCP通讯调试方法
  • LightGBM分类算法在医疗数据挖掘中的深度探索与应用创新(上)
  • GO--堆(have TODO)
  • aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
  • MATLAB计算朗格朗日函数
  • 2024.11.03 周报
  • 初识arkTS
  • 记一次微信云托管搭建Redis服务
  • 【51单片机】串口通信原理 + 使用
  • 动态规划理论基础和习题【力扣】【算法学习day.23】
  • 使用 RabbitMQ 有什么好处?
  • 【大数据学习 | kafka高级部分】文件清除原理
  • 无线振动传感器的安装方法
  • text-embedding-ada-002;BGE模型;M3E模型是Moka Massive Mixed Embedding;BERT
  • react中ref使用支持父调用子组件的方法
  • 基于springboot的音乐网站的设计与实现(源码+lw+调试)
  • 「C/C++」C++标准库 之 #include<iostream> 标准输入输出
  • 酒店管理系统|基于java和小程序的酒店管理小程序系统设计与实现(源码+数据库+文档)
  • 带轴承电枢的一般设计规则
  • MySQL表设计(三大范式 表的设计)
  • 助力你了解人工智能应用场景,分析市场,提高自身竞争力
  • 链表:LRU缓存
  • 算子级血缘助企业数据管理“自动化、精细化、智能化”
  • 自动化研磨领域的革新者:半自动与自动自磨机的技术突破