Ho notato che alcuni metodi come la sottostringa String (int beginIndex, int endIndex) e l'eliminazione di StringBuilder (int beginIndex, int endIndex), usano il secondo parametro per indicare che la sottostringa o l'eliminazione dovrebbero andare a endIndex-1 e non endIndex. C'è una ragione per questo? Non sembra, almeno per me, avere un senso logico per questi metodi per indicare che il metodo si arresta prima del parametro anziché del parametro, diversamente da altri metodi, in altre classi. Alcuni snippet di esempio potrebbero essere:
Esempio 1:
4: StringBuilder sb = new StringBuilder("abcdef");
5: sb.delete(2, 4);
6: System.out.println(sb);
//This would print abef instead of abf
Esempio 2:
4: String str = "abcdef";
5: String newStr = str.substring(2, 4);
6: System.out.println(newStr);
//This would print cd instead of cde
Questo sembra strano per chiunque altro considerando come funzionano altri metodi con i parametri dell'indice? C'è una ragione per questo? Se è così, per favore, spiegamelo.
Modifica per differenziare e chiarire una domanda unica: Questa domanda è diversa dalla discussione sulla sola sottostringa () poiché riguarda tutti i metodi che usano le indicizzazioni per indicare che il metodo dovrebbe fermarsi prima dell'endIndex fornito (esclusione invece dell'inclusione).