2016-07-06 3 views
2

Я хочу создать числовое представление 5 буквенных кодов. Коды могут содержать 1-5 букв или цифр.Как представить 5-строчную строку в виде цифры?

Номер должен обязательно быть уникальным. Не совсем необходимо, чтобы эти числа могли быть преобразованы обратно в ascii.

Таким образом, мне нужно цифры от 0 до ZZZZZ

Полученный размер число должно быть как можно меньше.

Я начал со следующим, но это не совсем то, что я хочу:

String a="ZZZZZZ"; 
for (int i = 0; i < a.length(); ++i) { 
    System.out.print(a.charAt(i)-'A'+1); 
} 

ZZZZZZ=262626262626 
000000=-16-16-16-16-16-16 
+0

Почему бы не сопоставить каждую букву с ее индексом в алфавите? A = 1, B = 2 и т. Д. – asenovm

+0

Вы хотите, чтобы он был чувствительным к регистру? – JRsz

+0

https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#digit-char-int- – assylias

ответ

9

Start, перечисляя все возможные «цифры» вашего номера:

  • десять десятичных цифр 0 через 9
  • Двадцать шесть букв A по Z

У вас есть 36 возможных «цифр» для пяти позиций, поэтому максимальное число составляет 36 = 60,466,176. Этот номер соответствует int.

Вы можете сделать этот номер, позвонив Integer.parseInt, и передавая десятичную 36:

System.out.println(Integer.parseInt("ABZXY", 36)); // 17355958 

Demo.

+0

Будет ли то же самое, если бы у меня были только буквы в верхнем регистре? Или тогда будет лучший способ беседы? – membersound

+1

@membersound Если вы отбрасываете десятичные цифры, вы можете сделать его более экономичным, используя преобразование base-26. Тем не менее, вам нужно будет написать преобразование самостоятельно - по существу, вычесть 'A' и добавить следующую цифру в виде: val = val * 26 + c - 'A''. – dasblinkenlight

2

Имейте в виду, что A134Z уже ряд; он печатается только в представлении Base-36!

Хотя это всего лишь одно предложение, вышесказанное должно дать вам все, что вам нужно знать, чтобы перевести любую 5-значную строку с 0-9 и A-Z в число (и обратно).

1

Вы можете обрабатывать строку как число в базе36 (где A = 10, B = 11 ... Z = 35). Таким образом, вы будете использовать точно цифры от 0 до 36^5-1, и каждый будет использоваться ровно один раз.

2

Простейшее решение - если буквы нечувствительны к регистру, следует использовать радиус 36 - полный алфавит плюс 10 цифр. Таким образом, вы получаете обе функции для бесплатной конвертации из строки в длинную и от длинной до строки следующим образом:

long numericCode = Long.parseLong("zzzzz", 36); // gives 60466175 
String stringCode = Long.toString(numericCode, 36); // gives "zzzzz" 
Смежные вопросы