用字母扩展 2 位数字范围
expanding 2 digit numeric range with alphabet
我有代表唯一值的字符串,带有 2 位数字前缀 + 固定代码 + 自己的值(操作员 ID),如下所示
01DD001,01DD002,..,99DD999
字符串已给定长度,DD部分的长度无法更改。当我设计这个唯一标识符时,我被告知前缀永远不会超过 99。现在我们必须扩展前缀,因为运算符 ID 超过了 99。所以如果我想扩展范围,我必须将小数前缀更改为两位数十六进制,给我范围 0-256。
其他可能的解决方案是将其威胁为字符串并使用整个字母表来扩展唯一标识符的可能数量,如 this
100 = A0 ,
111 = B1 ,
129 = C9...
所以问题是是否有一些库会使用第二种方法(或类似方法)
您可以使用 BigInteger
。它有一个方便的 toString(int radix) which you can use with a radix up to Character.MAX_RADIX 通常在 36
给你一个最大值 ZZ
= 1295
.
您总是可以发明自己的编号系统。这是一个结构良好且可逆的示例,但如果您仅限于大写,则只会给您 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));
}
}
我有代表唯一值的字符串,带有 2 位数字前缀 + 固定代码 + 自己的值(操作员 ID),如下所示
01DD001,01DD002,..,99DD999
字符串已给定长度,DD部分的长度无法更改。当我设计这个唯一标识符时,我被告知前缀永远不会超过 99。现在我们必须扩展前缀,因为运算符 ID 超过了 99。所以如果我想扩展范围,我必须将小数前缀更改为两位数十六进制,给我范围 0-256。 其他可能的解决方案是将其威胁为字符串并使用整个字母表来扩展唯一标识符的可能数量,如 this
100 = A0 ,
111 = B1 ,
129 = C9...
所以问题是是否有一些库会使用第二种方法(或类似方法)
您可以使用 BigInteger
。它有一个方便的 toString(int radix) which you can use with a radix up to Character.MAX_RADIX 通常在 36
给你一个最大值 ZZ
= 1295
.
您总是可以发明自己的编号系统。这是一个结构良好且可逆的示例,但如果您仅限于大写,则只会给您 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));
}
}