所以我刚刚学会了Integer.toString(int x, int radix);,并认为这是相当可怕的,因为它使基地转换超级容易。然而,我试图用Base-26按语音(a - z)编写,并注意到Integer.toString()遵循十六进制的示例,因为它以数字开头,然后使用字母表(0 - p)。我已经知道如何手动转换到Base-26,我不需要代码。但我想知道是否有一种方法可以利用Integer.toString(),因为它几乎已经完成了所有繁重的工作。有什么想法吗
Integer.toString(int x, int radix);
Integer.toString()
wpcxdonn1#
您可以迭代char[],将Integer.toString的输出移动到您想要的范围内。
char[]
Integer.toString
public static String toAlphabeticRadix(int num) { char[] str = Integer.toString(num, 26).toCharArray(); for (int i = 0; i < str.length; i++) { str[i] += str[i] > '9' ? 10 : 49; } return new String(str); }
Ideone Demo
uz75evzq2#
不,这个方法的实现方式有效地保证了它从0-9开始,然后通过a-f进行,然后如果基数超过16,则继续进行。如果您想以自己的方式完成此操作,则需要自己执行偏移。
sqougxex3#
如果你想让26 = aa而不是ba,那么这里有一些代码你可以使用。这是对发布到该线程的代码4castle的修改。
public static String toAlphabeticRadix(int num) { char[] str = Integer.toString(num, 26).toCharArray(); for (int i = 0; i < str.length; i++) { str[i] += (str[i] > '9' ? 10 : 49) - (num > 25 && i < 1 ? 1 : 0); } return new String(str); }
3条答案
按热度按时间wpcxdonn1#
您可以迭代
char[]
,将Integer.toString
的输出移动到您想要的范围内。Ideone Demo
uz75evzq2#
不,这个方法的实现方式有效地保证了它从0-9开始,然后通过a-f进行,然后如果基数超过16,则继续进行。
如果您想以自己的方式完成此操作,则需要自己执行偏移。
sqougxex3#
如果你想让26 = aa而不是ba,那么这里有一些代码你可以使用。
这是对发布到该线程的代码4castle的修改。