Java 有哪些方法可以将索引与N长度字符串关联?
情况如下: 我有36个字符可供选择,a-z和0-9Java 有哪些方法可以将索引与N长度字符串关联?,java,Java,情况如下: 我有36个字符可供选择,a-z和0-9 char[] alphabet = "0123456789abcdefghijklmnopqrstuvwxyz".toCharArray(); 使用索引,我们想要创建所有可能的长度为N的字符串,从N=1到N=2 长度为1相当简单 private String generateString(int index){ if (index < 36){ char word = alphabet[index];
char[] alphabet = "0123456789abcdefghijklmnopqrstuvwxyz".toCharArray();
使用索引,我们想要创建所有可能的长度为N的字符串,从N=1到N=2
长度为1相当简单
private String generateString(int index){
if (index < 36){
char word = alphabet[index];
return String.valueOf(word);
}
if ( index < 1332) {
//lost
}
}
私有字符串生成器(int索引){
如果(指数<36){
字符=字母表[索引];
返回字符串.valueOf(word);
}
如果(索引<1332){
//失落的
}
}
但是如果我们想要长度为2,那么我们可以假设长度为2的所有单词的索引都大于36且小于1332(36+(36^2))。但我不知道如何将这些索引与长度为2的单词联系起来,并确保所有可能的单词组合都被命中
我认为有一种数学方法可以做到这一点,但我只是没有看到它 我不确定你的问题是否正确。您想要不同字符串长度的所有字母组合吗(如a)?那么这可能对你有帮助 如果您的字母表只包含
0-z
,那么您可以使用Java提供基数36的方法,只需进行一些计数和填充:
void start(int lengthFrom, int lengthTo) {
for (int length = lengthFrom; length <= lengthTo; length++) {
for (int i=0; i < Math.pow(36, length); i++) {
result(String.format("%" + length + "s", Integer.toString(i, 36)).replace(' ', '0'));
}
}
}
void result(String s) {
System.out.println(s);
}
void开始(int lengthFrom,int lengthTo){
对于(int-length=lengthFrom;length哦,你不是在谈论这个,对吗
Integer.parseInt(word, 36);
Integer.toString(index, 36);
所以
Integer.parseInt("1z", 36); // int(71)
Integer.toString(71, 36); // "1z"
对于两个字母的单词,通过将1d索引折叠成大小为36的2d索引,创建映射[1,2,…,1296]->[“00”,“01”,…,“zz”]
,即[1,2,…,1296]->[(1,1),(2,1),(3,1),…,(36,36)]
:
你的意思是:553->“tx”,678->“yd”
等等吗?如果你看@steffen的简短答案,我上面的函数将输出与Integer.toString(index-1,36)
相同的结果。
Integer.parseInt("1z", 36); // int(71)
Integer.toString(71, 36); // "1z"
private String generateTwoLetterString(final int index) {
if(index > 1296)
throw new IndexOutOfBoundsException("index is greater than 1296");
int j = (int) Math.ceil(index/36f);
int i = index % 36 == 0 ? 36 : index % 36;
return String.format("%s%s", alphabet[j-1], alphabet[i-1]);
}