在 Java 中生成字母序列
2022-09-01 14:59:08
我正在寻找一种生成字母序列的方法:
A, B, C, ..., Z, AA, AB, AC, ..., ZZ.
任何人都可以建议一种方便的方法。我可以使用哪些数据结构?
我想要一些方法,这些方法可以获取序列中的下一个代码,然后重置序列。
我正在寻找一种生成字母序列的方法:
A, B, C, ..., Z, AA, AB, AC, ..., ZZ.
任何人都可以建议一种方便的方法。我可以使用哪些数据结构?
我想要一些方法,这些方法可以获取序列中的下一个代码,然后重置序列。
一个单行递归函数,用于从整数生成字符串:
static String str(int i) {
return i < 0 ? "" : str((i / 26) - 1) + (char)(65 + i % 26);
}
用法示例:
public static void main(String[] args) {
for (int i = 0; i < 27*27; ++i) {
System.out.println(i + " -> " + str(i));
}
}
输出:
0 -> A
1 -> B
2 -> C
[...]
24 -> Y
25 -> Z
26 -> AA
27 -> AB
[...]
700 -> ZY
701 -> ZZ
702 -> AAA
703 -> AAB
[...]
727 -> AAZ
728 -> ABA
我结合了维基百科的Hexavicesimal#Bijective base-26和Bijective numeration#Properties of bijective base-k数字,得出这个结论:
import static java.lang.Math.*;
private static String getString(int n) {
char[] buf = new char[(int) floor(log(25 * (n + 1)) / log(26))];
for (int i = buf.length - 1; i >= 0; i--) {
n--;
buf[i] = (char) ('A' + n % 26);
n /= 26;
}
return new String(buf);
}
在Wolfram Alpha的帮助下。也许在第一个链接中使用实现会更简单。