пошаговая отладка вашего кода:
переменные первого раза
start=0;
initlength=0;
s="Some people confuse acceptance with apathy, but there's all the difference in the world";
total = 5.
s.length()/initlength = 4.
- первая подстрока будет от 0 до 20.
start = 21
и initlenght = 40
- Второй раз в цикле
s.length()/initlength = 2
- подстрока от 21 до 40.
start = 41
и initlength = 80
.
- Третий раз в цикле.
s.length()/initlength = 1
и i
равны 2, поэтому цикл будет прерван, и выполнение программы завершится.
На основании ваших правок. Теперь он будет повторяться 5 раз. И после 3-го раза start = 81
и initlength = 160
, который находится вне диапазона строки. За все время total = 5
.
Если вы хотите, чтобы он получил оставшуюся часть, попробуйте это:
int initlength = 20;
int start = 0;
String s = "Some people confuse acceptance with apathy, but there's all "
+ "the difference in the world";
int total = (int) Math.ceil((double) s.length() / (double) initlength);
for (int i = 0; i < total; i++) {
if(initlength<s.length()){
System.out.println("s length" + s.substring(start, initlength));
start = initlength + 1;
initlength = initlength + initlength;
} else {
initlength = s.length();
System.out.println("s length" + s.substring(start, initlength));
break;
}
}
выход: -
s lengthSome people confuse
s lengthcceptance with apat
s lengthy, but there's all the difference in th
s length world