2013-10-11 2 views
0

Сказать, что у меня естьJava преобразовать строку из чисел на возможные комбинации ASCII символов

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 

Из любопытства, можно ли, в простой форме, обратить вспять процесс?

+5

Скажите, что у вас '123'. Должно ли оно быть '12' +' 3' или '1' +' 23'? – arshajii

+0

Я не думаю, что вы можете, так как будет трудно отличить, является ли 2 числа одним символом или 3-мя числами: p был '80', но g -' 103'. Таким образом, вы не знаете, ожидать ли 2 цифры/char или 3 цифры/char – inixsoftware

+0

Вот почему я спросил, возможно ли это, просто, сделать это, поскольку даже короткая строка создает так много возможностей. – hudadiaz

ответ

1

, что вы должны сделать, это предположить, что каждое число находится в пределах либо 'A' до 'Z', (65 до 90) или 'а' до 'Z' (97 до 122)

  1. получить первые 2 цифры через вызов substring()
  2. проверки, если таковые находятся в пределах указанных границ путем преобразования в числовой тип
    • если они затем продолжить с петлей
  3. еще получить THI й разряд и проверить, что

было бы гораздо проще, если бы вы могли бы это быть дополнены до трех цифр, чтобы вы знали, что каждые три цифры образовали 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, то он будет работать правильно для всех значений ASCII от 26 до: для значений 26 до 99, он будет интерпретировать их как имеющие 2 цифры правильно, для значений от 100 до 255 будет смотреть только на первые 2 цифры, поэтому они будут отображаться как 10-25 и будут интерпретироваться как 3 цифры длиной

Смежные вопросы