Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有哪些方法可以将索引与N长度字符串关联?_Java - Fatal编程技术网

Java 有哪些方法可以将索引与N长度字符串关联?

Java 有哪些方法可以将索引与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];

情况如下:

我有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];
        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]);
}