Java String.substring返回空字符串

Dal*_*ale 2 java

我正在尝试运行以下代码

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;
}
Run Code Online (Sandbox Code Playgroud)

每次运行代码时,当计数器变量= 1时,我得到一个java.lang.ArrayIndexOutOfBoundsException.检查调试器中的代码,当它应该返回inputString中的第二个字符时,子串会返回一个空字符串.

任何人都可以建议为什么会这样?

x4u*_*x4u 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;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您还可以避免创建子字符串.这会给你相同的结果:

for (a = 0; a <= 255; a++)
{
    ctmp = inputString.charAt(a % intLength);
    sbox[a] = ctmp;
}
Run Code Online (Sandbox Code Playgroud)