【算法-字符串】【WERTYU】

题目:

把手放在键盘上时,稍不注意就会往右错一位。这样的话,Q会变成W,J会变成K等。

电脑键盘如图所示:


输入一个错位后敲出的字符串,输出打字员本来想打出的句子。

样例输入:O S, GOMR YPFSU/

样例输出:I AM FINE TODAY.


【分析】根据题目的意思每个输入的字符,对应的输出都是它左边的字符。分析一下,键盘上的tab、backsp、control、alt、enter这几个键应该排除掉。一个很笨的解决办法就是用if或者switch方式,比如if(c == ';') System.out.print('L')这样子,用这种方式我们可以想象得出会写很多的判断代码。继续仔细思考一下,有没有更简约的办法呢,这个时候如果我们引入一种数据结构---数组,把键盘中的字符按照从左到右从上到下的顺序都存入到字符数组中,会不会为我们的程序带来简约的解决方式呢,如果有这样一个数组的话,不难想象,输出字符就是输入字符的位置向左移动一个位置的字符,那么我们程序也就能够简约起来了。


【java源码】

public class Test017 {
	
	public static void main(String[] args) {
		//在这里如果写成char数组的话,要写很多得单引号和逗号,写成字符串会比较简约
		String s = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		sc.close();
		StringBuilder ret = new StringBuilder();
		for(int i=0; i<input.length(); i++){
			char c = input.charAt(i);
			int index = s.indexOf(c);
			if(index == -1){
				//如果没找到,比如空格,就直接输出空格
				ret.append(c);
			}else{
				//如果找到了,就输出它左边的那个字符
				ret.append(s.charAt(index-1));
			}              
		}
		
		System.out.println(ret);
	}
}


这里要注意的是'\'这个字符需要用'\\'来表示,因为它是转义字符。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值