2016-03-01 1 views
-4

Я пытаюсь преобразовать буквенно-цифровую строку в Integer и из Integer необходимо создать такую ​​же буквенно-цифровую строку.Java: как преобразовать буквенно-цифровую строку в Integer и из целых чисел в одну и ту же буквенно-цифровую строку?

Ниже приведен мой код. Их лучший подход к достижению?

 Map<Character, String> lettersToNumbers = new HashMap<Character, String>(); 
    lettersToNumbers .put('1', "01"); 
    lettersToNumbers .put('2', "02"); 
    lettersToNumbers .put('3', "03"); 
    lettersToNumbers .put('4', "04"); 
    lettersToNumbers .put('5', "05"); 
    lettersToNumbers .put('6', "06"); 
    lettersToNumbers .put('7', "07"); 
    lettersToNumbers .put('8', "08"); 
    lettersToNumbers .put('9', "09"); 
    lettersToNumbers .put('0', "00"); 
    lettersToNumbers .put('A', "10"); 
    lettersToNumbers .put('B', "11"); 
    lettersToNumbers .put('C', "12"); 
    lettersToNumbers .put('D', "13"); 
    lettersToNumbers .put('E', "14"); 
    lettersToNumbers .put('F', "15"); 
    lettersToNumbers .put('G', "16"); 
    lettersToNumbers .put('H', "17"); 
    lettersToNumbers .put('I', "18"); 
    lettersToNumbers .put('J', "19"); 
    lettersToNumbers .put('K', "20"); 
    lettersToNumbers .put('L', "21"); 
    lettersToNumbers .put('M', "22"); 
    lettersToNumbers .put('N', "23"); 
    lettersToNumbers .put('O', "24"); 
    lettersToNumbers .put('P', "25"); 
    lettersToNumbers .put('Q', "26"); 
    lettersToNumbers .put('R', "27"); 
    lettersToNumbers .put('S', "28"); 
    lettersToNumbers .put('T', "29"); 
    lettersToNumbers .put('U', "30"); 
    lettersToNumbers .put('V', "31"); 
    lettersToNumbers .put('W', "32"); 
    lettersToNumbers .put('X', "33"); 
    lettersToNumbers .put('Y', "34"); 
    lettersToNumbers .put('Z', "35"); 

     StringBuilder sb= new StringBuilder(); 
    String covertToInteger = "FR1234".toUpperCase(); 
    for (Character ch : covertToInteger.toCharArray()){ 
      sb.append(lettersToNumbers.get(ch)); 
     } 

System.out.println(sb.toString()); 

String integertoalphanumeric= sb.toString(); 
int i=0; 
for(;i<abc.length();){ 

    for (Entry<Character, String> entry : lettersToNumbers.entrySet()) { 
     if (entry.getValue().equals(abc.substring(i, i+2))) { 
      System.out.print(entry.getKey()); 
     } 
    } 
    i=i+2; 

} 

Любая помощь будет оценена по достоинству.

+1

Вы должны дать больше информации, чем это. Каков ваш вклад? Где проверить строку и целое? –

+1

Какова математическая связь между '3456' и' 1234'? Подготовка и удаление «FR» должно быть достаточно простым. –

+1

Это не обратимая функция. Вы теряете информацию «FR» при преобразовании в целое число, и, если вы ее каким-либо образом не сохраните, вы не сможете отменить действие. Если вам нужен такой контроль, я бы посоветовал вам написать класс, который обрабатывает такую ​​логику и сохраняет ее согласованно. – Neil

ответ

1

Предполагая, что вы говорите о типе Integer, то то, что вы пытаетесь, не будет работать.

Предположим, мы ограничимся 6 символами буквенно-цифровых строк в соответствии с вашим примером. Есть 62 (латинских) буквенно-цифровых символа: 10 цифр, 26 прописных букв и 26 строчных букв.

Общее число различных строк alphanum 6 символов 62 == 56800235584. Но есть только 2 == 4294967296 различных значений, что int/integer могут представлять. Это на порядок меньше.

Таким образом, математически невозможно придумать кодировку, который может представлять все возможные 6 символов alphanum строки в качестве отдельных int значений.

(А если вы используете long вместо int, затем 11 символьных строк слишком долго.)

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