说我有
String input = "Programming", result="\0";
int temp;
for (int i=0;i<input.length();++i) {
temp = input.charAt(i);
result += temp;
}
结果
将为8011411110311497109109105110103
。我知道
P = 80
r = 114
o = 111
g = 103
r = 114
a = 97
m = 109
m = 109
i = 105
n = 110
g = 103
出于好奇,是否有可能以简单的方式逆转该过程?
最佳答案
您需要做的是假设每个数字位于“A”到“Z”(65 到 90)或“a”到“z”(97 到 122)之间
- 通过调用
substring()
获取前 2 位数字 - 通过转换为数字类型来检查它们是否在上述范围内
- 如果这样做,则继续循环
- 否则获取第三位数字并检查
如果你可以将其填充为三位数字,这样你就会知道每三个数字组成一个 ASCII 字母,那就简单多了
仅当它是字母时才有效的代码:
public static void main(String[] args) {
String toConvert= "8011411110311497109109105110103";
String result="";
while(toConvert.length()>0){
String digits=toConvert.substring(0, 2);
int num=Integer.valueOf(digits);
if(('A'<=num&&num<='Z')||('a'<=num&&num<='z')){
toConvert=toConvert.substring(2);
}
else{
digits=toConvert.substring(0, 3);
num=Integer.valueOf(digits);
toConvert=toConvert.substring(3);
}
String letter = String.valueOf((char) num);
result+=letter;
}
System.out.println(result);
}
注意如果将测试更改为 num>25
,那么它将正确处理从 26 到 99 的所有 ASCII 值:对于值 26 到 99,它将解释它们正确地具有 2 位数字,对于从 100 到 255 的值,它只会查看前 2 位数字,因此它们将被视为 10-25,并将被解释为 3 位数字长
关于java 将整数字符串转换为可能的 ASCII 字符组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19308356/