// assumes indices are sorted static L splitStringAtIndices(S s, L indices) { Iterator it = indices.iterator(); new L parts; int i = 0; while true { if (!it.hasNext()) { parts.add(substring(s, i)); break; } int j = it.next(); parts.add(substring(s, i, j)); i = j; } ret parts; }