-7

例如。BRYR904000Z5 必须转换为数字格式,使得( A = 101, B=102, C=103.... 你得到它直到 Z=126 )

我希望 BRYR904000Z5 为 1021181251189040001265
我还想知道是否可以显示整个数字。(在密码生成器上工作)

我看到了一个分隔字符的代码,但这对我来说很难理解。谢谢

4

3 回答 3

2

这是一个算法的骨架:

  • 创建一个新的空 StringBuilder
  • 循环遍历字符串的所有字符
  • 在每次迭代中:
    • 如果当前字符 >= 'A' 且 <= 'Z',则将其转换为其数值,并将此数值附加到 StringBuilder
    • 否则,将当前字符附加到 StringBuilder
  • 将 StringBuilder 转换为 String
于 2013-07-27T15:05:51.853 回答
1

如果我们处理所有大写字母,看起来我们是,ASCIIA是 65。所以,为了得到A101,我们必须添加 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);
}

编辑:
如果有任何混淆,请原谅我,上述方法仅用于从chartointintto转换char。您不需要转换数字,因为它们保持不变,即只需将它们添加到String.

换句话说,当你遇到一个字母时循环遍历你的String和调用charToIntCustomConversion(再次假设所有都是大写的),如果你遇到一个数字,只需将它添加到转换后的字符串中。

回到原来String的有点棘手,但这似乎不是你要问的,但是,如果你知道一个intcoorespond 到一个转换的字符,你可以使用intToCharCustomConversion.

转换回:
如果您希望能够轻松确定转换 String后的数字是对应于字符还是原始数字String,最简单的方法可能是使用数组。如果转换后的数组中的元素是单个数字,则您知道它最初是一个数字。如果它是一个 3 位数字,则您知道它最初是一个char.

注意:
还有更多,可能更好的方法来做到这一点。

于 2013-07-27T15:05:35.350 回答
0
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。

于 2013-07-27T15:06:22.380 回答