zaidhuda
zaidhuda

Reputation: 35

java convert String of integers into possible combination of ASCII characters

Say that I have

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

result would be 8011411110311497109109105110103. I know that

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

Out of curiosity, is it possible, in easy way, to reverse the process?

Upvotes: 0

Views: 868

Answers (1)

vandale
vandale

Reputation: 3650

what you would have to do is assume that Each number lies between either 'A' to 'Z', (65 to 90) or 'a' to 'z' (97 to 122)

  1. get the first 2 digits via a call to substring()
  2. check if those lie within the above bounds by converting to a numeric type
    • if they do then continue with the loop
  3. else get the third digit and check that

it would be much simpler if you could have it be padded to three digits so you would know that every three digits formed an ASCII letter

code that works only if it is letters:

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);
}

note if you change the test to num>25 , then it will correctly work for all ASCII values from 26 up: for values 26 to 99, it will interpret them as having 2 digits correctly, for values from 100 to 255 it will only look at the first 2 digits, so they will be seen as 10-25, and will be interpreted as 3 digits long

Upvotes: 1

Related Questions