Java 为什么子字符串中有错误?
可能代码很乱,但我对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
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);