0

说我有

    String input = "Programming", result="\0";
    int temp;
    for (int i=0;i<input.length();++i) {
        temp = input.charAt(i);
        result += temp;
    }

result将是8011411110311497109109105110103。我知道

    P = 80
    r = 114
    o = 111
    g = 103
    r = 114
    a = 97
    m = 109
    m = 109
    i = 105
    n = 110
    g = 103

出于好奇,是否有可能以简单的方式扭转这一过程?

4

1 回答 1

1

您需要做的是假设每个数字介于“A”到“Z”、(65 到 90)或“a”到“z”(97 到 122)之间

  1. 通过调用获取前 2 位数字substring()
  2. 通过转换为数字类型来检查这些是否在上述范围内
    • 如果他们这样做,那么继续循环
  3. 否则得到第三个数字并检查

如果您可以将其填充为三位数字会更简单,这样您就会知道每三位数字形成一个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 开始的所有 ASCII 值:对于 26 到 99 的值,它会将它们正确解释为具有 2 位数字,对于从 100 到 255 的值,它只会查看第一个2 位数,因此它们将被视为 10-25,并将被解释为 3 位数长

于 2013-10-11T00:30:43.077 回答