我正在尝试运行以下代码
int[] sbox = new int[256];
String inputString = "Thisisanexample";
String sTemp;
char cTmp;
int intLength = inputString.length();
for (a = 0; a <= 255; a++)
{
sTemp = inputString.substring(a % intLength, 1);
ctmp = sTemp.toCharArray()[0];
sbox[a] = (int)ctmp;
}
每次运行代码时,当计数器变量= 1时,我得到一个java.lang.ArrayIndexOutOfBoundsException。检查调试器中的代码,看来子串返回一个空字符串,它应返回第二个字符。 inputString。
有人可以建议为什么会这样吗?
答案 0 :(得分:5)
String.substring()需要开始和结束索引,而不是长度。所以你需要将长度添加到起始索引:
for (a = 0; a <= 255; a++)
{
int index = a % intLength;
sTemp = inputString.substring( index, index + 1 );
ctmp = sTemp.toCharArray()[0];
sbox[a] = (int)ctmp;
}
在这种情况下,您还可以避免创建子字符串。这会给你相同的结果:
for (a = 0; a <= 255; a++)
{
ctmp = inputString.charAt(a % intLength);
sbox[a] = ctmp;
}
答案 1 :(得分:0)
如果有疑问,请检查javadoc这会显示substring()
没有按照您的想法执行操作...
答案 2 :(得分:0)
当你使用调试器时,你可以看到第一次循环,你得到一个字符,第二次没有字符。
那是因为String.substring(int start, int end)
结束了,而不是长度。
BTW:你可以写
int[] sbox = new int[256];
String inputString = "Thisisanexample";
for(int i = 0; i < sbox.length; i++)
sbox[i] = inputString.charAt(i % inputString.length());
答案 3 :(得分:0)
String.substring(begining, endIndexExclusive)
当a = 1时,beginIndex = 1,endIndexExclusive = 1 =&gt;
sTemp ==“”=&gt;
toCharArray()返回空数组=&gt;
[0] indexOutOfBounds