Java String.substring返回空字符串

时间:2011-06-01 15:27:30

标签: 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;
}

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

有人可以建议为什么会这样吗?

4 个答案:

答案 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