Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 为什么子字符串中有错误?_Java_Android - Fatal编程技术网

Java 为什么子字符串中有错误?

Java 为什么子字符串中有错误?,java,android,Java,Android,可能代码很乱,但我对Java的了解不是很好 我有下面的函数,子字符串中有一个错误,但我猜不出原因 private static void generateCode() { BigInteger basenumBig = BigInteger.valueOf(9007199254740989L); long basenum = basenumBig.longValue(); StringBuilder index = new StringBuilder("a

可能代码很乱,但我对Java的了解不是很好

我有下面的函数,子字符串中有一个错误,但我猜不出原因

private static void generateCode()
{       
    BigInteger basenumBig = BigInteger.valueOf(9007199254740989L);
    long basenum = basenumBig.longValue();

    StringBuilder index = new StringBuilder("abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");

    long base = index.length();

    String out = new String();
    for (long t = (long) Math.floor(Math.log(basenum) / Math.log(base)); t >= 0; t--) {
        long bcp = (long) Math.pow(base, t);
        int a = (int) (Math.floor(basenum / bcp) % base);
        out = out + index.substring(a, 1);
        basenum = basenum - (a * bcp);
    }
    out = new StringBuilder(out).reverse().toString();

    System.out.println("CODE (" + out + ")");
}
结果应该是fE2XnNGpF

,看起来您正在使用substring函数作为开始索引,length,不幸的是,它在Java的string类中不是这样工作的。从中,substring函数的两个参数是包含开始索引和独占结束索引。因此,如果您想要从a开始的长度为1的子字符串:

具体来说,您当前的代码可能抛出IndexOutOfBoundsException,因为有时beginIndex a大于endIndex 1。

您使用的子字符串方式错误,它将输入作为子字符串开始索引,结束索引。所以代码应该是这样的

out = out + index.substring(1, a);

index.substringa,1看起来可疑;你是说index.substringa,a+1吗?我从PHP移植了这段代码,在那里,子字符串被设置为substringa,1,其中a总是a>1。您建议我使用哪个函数来代替子字符串,这样起点可以大于1,但终点可以是1?谢谢你我对你的意思有点困惑;子字符串的起点不可能在其终点之后,除非您正在环绕或做其他事情。也就是说,java中的abcdef.substring3,4的输出与php中的substrabcdef,3,1相同。
out = out + index.substring(1, a);