概述
题目大概是这样的:
a-z分别代表1-26,输入数字不超过32位,字符最少一位,不超过6位
实现输入为字符串时,将其转成相应数字 如:ab-->28
输入为数字时,将其转成相应字符串 如:28-->ab
PS:感谢评论中的指正
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* a-z分别代表1-26
* 输入数字不超过32位 字符不超过6位
* 实现字符串转成相应数字 数字转成相应字符串
*
* @Author ycl
*/
public class Main {
static Pattern pattern1 = Pattern.compile("^[0-9]{1,32}$");
static Pattern pattern2 = Pattern.compile("^[a-z]{1,6}$");
public static void main(String[] args) {
System.out.println("请输入要转换的数字/英文字符串:");
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
str = str.toLowerCase();
Matcher matcher1 = pattern1.matcher(str);
boolean b1 = matcher1.matches();
Matcher matcher2 = pattern2.matcher(str);
boolean b2 = matcher2.matches();
if (b1) {
//1表示输入为数字
String result = covertTo26(str, 1);
System.out.println("十进制数字【" + str + "】转为二十六进制,使用a-z字母表示为:" + result);
} else if (b2) {
//2表示输入为字母
String result = covertTo26(str, 2);
System.out.println("二十六进制字符串【" + str + "】转为十进制数字为:" + result);
} else {
System.out.println("格式非法");
}
System.out.println("请输入要转换的数字/英文字符串:");
}
}
private static String covertTo26(String input, int flag) {
String str = "abcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder();
if (flag == 1) {
//1表示输入为数字
int inputNum = Integer.parseInt(input);
int n = 0;
while (inputNum != 0) {
n = inputNum % 26;
if (n == 0) {
n = 26;
}
sb.append(str.charAt(n - 1));
inputNum = inputNum / 26;
if (n == 26) {
inputNum --;
}
}
return sb.reverse().toString();
} else {
int num = 0;
int length = input.length();
for (int i = 0; i < length; i++) {
num += toPow(str.indexOf(input.charAt(i)) + 1, length - i - 1);
}
return num + "";
}
}
private static int toPow(int num, int i) {
for (int j = 1; j <= i; j++) {
num *= 26;
}
return num;
}
}
最后
以上就是甜蜜月光为你收集整理的a-z分别表示1-26的26进制 字符串和数字相互转换的全部内容,希望文章能够帮你解决a-z分别表示1-26的26进制 字符串和数字相互转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复