例如。BRYR904000Z5 必须转换为数字格式,使得( A = 101, B=102, C=103.... 你得到它直到 Z=126 )
我希望 BRYR904000Z5 为 1021181251189040001265
我还想知道是否可以显示整个数字。(在密码生成器上工作)
我看到了一个分隔字符的代码,但这对我来说很难理解。谢谢
例如。BRYR904000Z5 必须转换为数字格式,使得( A = 101, B=102, C=103.... 你得到它直到 Z=126 )
我希望 BRYR904000Z5 为 1021181251189040001265
我还想知道是否可以显示整个数字。(在密码生成器上工作)
我看到了一个分隔字符的代码,但这对我来说很难理解。谢谢
这是一个算法的骨架:
如果我们处理所有大写字母,看起来我们是,ASCII值A
是 65。所以,为了得到A
101,我们必须添加 36:
/*Expects only capital letters*/
public int charToIntCustomConversion(char c)
{
return (int) c + 36;
}
(int) c
获取 ASCII 值c
并返回int
+ 36。
要转换回来:
/*Expects only capital letters*/
public char intToCharCustomConversion(int n)
{
return (char) (n - 36);
}
编辑:
如果有任何混淆,请原谅我,上述方法仅用于从char
toint
和int
to转换char
。您不需要转换数字,因为它们保持不变,即只需将它们添加到String
.
换句话说,当你遇到一个字母时循环遍历你的String
和调用charToIntCustomConversion
(再次假设所有都是大写的),如果你遇到一个数字,只需将它添加到转换后的字符串中。
回到原来String
的有点棘手,但这似乎不是你要问的,但是,如果你知道一个int
coorespond 到一个转换的字符,你可以使用intToCharCustomConversion
.
转换回:
如果您希望能够轻松确定转换 String
后的数字是对应于字符还是原始数字String
,最简单的方法可能是使用数组。如果转换后的数组中的元素是单个数字,则您知道它最初是一个数字。如果它是一个 3 位数字,则您知道它最初是一个char
.
注意:
还有更多,可能更好的方法来做到这一点。
StringBuilder result = new StringBuilder();
for(int i =0; i < string.length(); ++i) {
char c = string.charAt(i);
if (Character.isLetter(c) {
result.append(c - 0x0041 + 101);
} else if (Character.isDigit) {
result.append(c);
} else throw new RuntimeException("BS");
}
0x0041 代表大写 A 的 unicode。