2015-09-08 2 views
1

У меня есть строка, представляющая unigue значения с 2 значным префиксом + фиксированным кодом + собственным значение (ID оператор), как этогорасширяющиеся 2 значные цифровой диапазон с алфавитом

DD001, DD002, .., DD999

Строка предоставила длину, а длину части DD можно изменить. Когда я разработал этот идентификатор идентификации, мне сказали, что префикс никогда не будет превышать 99. Теперь нам нужно расширить префикс, поскольку идентификатор оператора превысил 99. Поэтому, если я хочу расширить диапазон, я должен изменить десятичный префикс на две цифры шестнадцатеричный, который дает мне диапазон 0-256. Другого Возможное решения заключается в угрозу ее как строка и использовать весь алфавит для расширения Возможного количества уникальных идентификаторов, как это

100 = A0 , 
111 = B1 , 
129 = C9... 

Таким образом, вопрос есть какая-либо библиотека, которая будет использовать второй ПОДХОД (или simmilar)

+0

О, старый добрый "Мне сказали * * никогда не превысит * <количество вставки> *.". И угадайте, что, он превысил. Вы должны подготовиться к худшему, я бы использовал весь алфавит, позже вам, возможно, придется добавить еще одну цифру. –

ответ

1

Вы можете использовать BigInteger. Он имеет удобный toString(int radix), который вы можете использовать с радиусом до Character.MAX_RADIX, который обычно находится в 36, что дает вам максимальное значение ZZ = 1295.

+0

Это сломает уже сгенерированные id-s –

+0

@hege_hegedus - Если вы отбросите все числа только с 0-9, вы потеряете только '99', он все равно расширяет диапазон на' 1000 + '. Однако я попытаюсь придумать лучший способ. – OldCurmudgeon

+0

Я думаю, что это действительно хорошее решение. Я должен сохранить allredy сгенерированные значения, поэтому мне приходится обрабатывать число меньше 100 по-старому, и с этим решением последнее столкновение - 81. Я могу использовать это решение. Благодарю . Такая приятная функция в базе api. –

0

Вы всегда можете изобрести свою собственную систему нумерации. Вот пример, который довольно хорошо сформирован и обратим, но дает только диапазон 0 - 1036, если вы ограничены только прописными буквами.

/** 
* Number system where 0-99 appear as 0-99 but beyond that we can use A-Z. 
* 
* @param n - The number to convert. 
* @return - It's representation in this strange form. 
*/ 
public static String strangeNumber(int n) { 
    if (n < 100) { 
     // 0 - 99 - The old way. 
     String s = "00" + n; 
     return s.substring(s.length() - 2); 
    } else { 
     // Done the first 100. 
     n -= 100; 
     // First digit is now 'A', 'B' ... 
     int firstDigit = 'A' + (n/36); 
     if (firstDigit > 'Z') { 
      throw new NumberFormatException("Cannot format number " + n); 
     } 
     int remainder = n % 36; 
     int secondDigit = remainder < 10 ? '0' + remainder : 'A' + (remainder - 10); 
     return Character.toString((char) firstDigit) + Character.toString((char) secondDigit); 
    } 
} 

public void test() { 
    for (int i = 0; i < 1036; i++) { 
     System.out.println(i + " = " + strangeNumber(i)); 
    } 
} 
+0

приятное решение, я хотел использовать что-то вроде этого, но мне больше нравится BigInteger.toString (Character.MAX_RADIX). –

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