Подстрока с петлей - PullRequest
0 голосов
/ 13 мая 2011

В приведенном ниже коде я пытаюсь сделать подстроку на основе индекса начала и конца, но в конце строки. Система выдает ArrayIndexOutOfBoundsException.Пожалуйста, дайте мне знать, как решить эту проблему.

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        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++) {
            System.out.println("s length" + s.substring(start, initlength));
            start = initlength + 1;
            initlength = initlength + initlength;
            }
    }

С уважением,

chaitu

Ответы [ 2 ]

1 голос
/ 13 мая 2011

пошаговая отладка вашего кода:

  1. переменные первого раза

    start=0; initlength=0; s="Some people confuse acceptance with apathy, but there's all the difference in the world"; total = 5.

  2. s.length()/initlength = 4.

  3. первая подстрока будет от 0 до 20.
  4. start = 21 и initlenght = 40
  5. Второй раз в цикле
  6. s.length()/initlength = 2
  7. подстрока от 21 до 40.
  8. start = 41 и initlength = 80.
  9. Третий раз в цикле.
  10. 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
0 голосов
/ 13 мая 2011

Разве initlength не станет больше и больше, пока не достигнет конца строки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...