返回空字符串的Java String.substring

返回空字符串的Java String.substring,java,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.toCha

我正在尝试运行以下代码

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;
}
int[]sbox=newint[256];
String inputString=“thisisanample”;
字符串sTemp;
煤焦cTmp;
int intLength=inputString.length();
对于(a=0;aString.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如果有疑问,请检查此选项,它显示
substring()
不会执行您认为它会执行的操作…

当您使用调试器时,您可以看到第一次循环得到一个字符,第二次循环没有字符

这是因为
String.substring(int start,int end)
取结尾,而不是长度

顺便说一句:你可以写

int[] sbox = new int[256];
String inputString = "Thisisanexample";
for(int i = 0; i < sbox.length; i++)
    sbox[i] = inputString.charAt(i % inputString.length());
int[]sbox=newint[256];
String inputString=“thisisanample”;
对于(int i=0;i
String.substring(begining,endIndexExclusive)
当a=1,beginIndex=1,endIndexExclusive=1=>
sTemp==“”=>
toCharArray()返回空数组=>
[0]indexOutOfBounds

你可以给可怜的家伙一个提示,告诉他他在哪里误解了函数。说“你的程序输出错误,因为它包含错误”是真的,但不是很有用。@Jay它已经用正确的答案回答了,我想这应该是一个评论,而不是答案…谢谢,我不知道我怎么会错过它。你的第二个例子看起来更优雅,我同意。可能应该查一个更好的来源。我在谷歌上搜索了它,并将其作为首选答案“我们在上面的代码中有两个数字,0和2。这意味着开始抓取字符串中位置0处的字符,并在有两个字符时停止抓取。”因此我假设这与c#相同。因为这是在一次迭代中进行的,而且数字看起来不错,出于某种原因,我没有弄清楚。为所有的答案干杯。
int[] sbox = new int[256];
String inputString = "Thisisanexample";
for(int i = 0; i < sbox.length; i++)
    sbox[i] = inputString.charAt(i % inputString.length());