一个字符转换及计算的思考题

做了一个关于字符转换及计算的思考题,记录一下。。。。
设定,出现的字符在a-z及A-Z之间,(1)其中a/A -z/Z分别可以解码为数字的1-26;(2)在字符中当遇到大写A-Z时,可以转换为相应的两个小写a-z;(3)解码准则为value=连续字符个数的平方*该字符所代表的数字,如aaa的value=3*3*1=9,bBb相当于bbbb其 value=4*4*2=32。
设计实现如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String line = "";
		try {
			System.out.print("请输入需要解密的密语个数: ");
			line = bf.readLine();
			while(!isNumeric(line)){
				System.out.print("请输入需要解密的密语个数: ");
				line = bf.readLine();
			}
			int num = Integer.parseInt(line);
			int[] results = new int[num];
			for(int i = 0; i < num; i++){
				line = bf.readLine();
				results[i] = getValue(line);
			}
			for(int i = 0; i < num; i++){
				System.out.println(results[i]);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 计算密语字符串的值
	 * @param lan
	 * @return
	 */
	public static int getValue(String lan){
		int result = 0;
		
		int length = lan.length();
		if(length <= 0){
			return 0;
		}
		StringBuilder sb = new StringBuilder();
		for(int i = 0; i < length; i++){
			char s = lan.charAt(i);
			if(s >= 97){
				sb.append(s);
			}else{
				sb.append((char)Integer.parseInt(String.valueOf((s+32))))
					.append((char)Integer.parseInt(String.valueOf((s+32))));
				
			}
		}
		
		char temp;
		char index;
		int i = 0;
		int j = i+1;
		int le = 1;		//连续字符长度
		while(i < sb.length()){
			temp = sb.charAt(i);
			while(j < sb.length()){
				index = sb.charAt(j);
				if(temp == index){
					le++;
					j++;
					if(j == sb.length()){		//最后一个字符  连续字符
						result += (le * le * Integer.parseInt(String.valueOf((temp - 96))));
					}
				}else{
					result += (le * le * Integer.parseInt(String.valueOf((temp - 96))));
					break;
				}
			}
			if(i == sb.length()-1){		//最后一个字符	单个字符
				result += (le * le * Integer.parseInt(String.valueOf((temp - 96))));
				break;
			}
			i = j;
			j = i+1;
			le = 1;
		}
		
		return result;
	}
	
	/**
	 * 判断一个字符串是否为数字
	 * @param str
	 * @return
	 */
	public static boolean isNumeric(String str){ 
		   Pattern pattern = Pattern.compile("[0-9]*"); 
		   Matcher isNum = pattern.matcher(str);
		   if( !isNum.matches() ){
		       return false; 
		   } 
		   return true; 
		}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值