Что именно происходит при выполнении цикла while (что делается внутри цикла while)? (Предполагается удалить подстроку и символ за ней) - PullRequest
0 голосов
/ 17 ноября 2018
 public String removeStrings()
 {  
    String cleaned = sentence; //sentence and remove are inputs
    int loc = cleaned.indexOf(remove);
    while (loc>-1) //need explanation on how this works
    { 
      cleaned = cleaned.substring(0, loc-1)+cleaned.substring(loc+remove.length());
      loc = cleaned.indexOf(remove);
    }
    return cleaned;
}

Пример входного предложения = "xR-MxR-MHelloxR-M" и remove = "RM" // также должен удалить x в этом случае https://github.com/AndrewWeiler/AndrewMac/blob/master/ACSWeiler/src/Lab09/StringRemover.java

1 Ответ

0 голосов
/ 17 ноября 2018

String.substring () либо возвращает часть ob String между двумя позициями (в cleaned.substring(0, 1), которая будет содержимым cleaned между позициями 0 и 1), либо если вы дадите этому методу только 1 int-аргумент, он возвращает часть вашей String, которая идет после этой позиции.

Например, с sentence="xR-MxR-MHelloxR-M" and remove="R-M" вы получите:

cleaned = "xR-MxR-MHelloxR-M"
loc = 1

Так что цикл while будет выглядеть следующим образом:

cleaned.substring(0, loc-1) возвращает "x" и cleaned.substring(loc+remove.length()) возвращает "xR-MHelloxR-M".Итак cleaned = "xxR-MHelloxR-M".Затем loc становится позицией следующего вхождения remove.

Словом, ваш цикл while удаляет каждое вхождение строки remove из строки sentence и сохраняет результат в cleaned.

Для подстроки () отметьте https://www.javatpoint.com/substring.

Редактировать:

Если вы хотите, чтобы первый символ перед подстрокой тоже был удален,вам просто нужно сказать

loc = cleaned.indexOf(remove) - 1;
...