Java 8、313 312 306バイト
import java.util.*;s->{Set l=new HashSet();for(int z=s.length(),i=0,j;i<z;i++)for(j=i;j<z;p("",s.substring(i,j+++1),l));l.remove(s);l.forEach(System.out::println);}void p(String p,String s,Set l){int n=s.length(),i=0;if(n<1)l.add(p);else for(;i<n;p(p+s.charAt(i),s.substring(0,i)+s.substring(i+++1,n),l));}
ここで私の答えの修正版、ここでp("",s,l);
置き換えられていますfor(int z=s.length(),i=0,j;i<z;i++)for(j=i;j<z;p("",s.substring(i,j+++1),l));
リンクされた回答の@OlivierGrégoireに感謝します。
この部分の説明:
ここで試してみてください。
for(int l=s.length(),i=0,j;i<l;i++)
// Loop (1) from 0 to the length of the String (exclusive)
for(j=i+1;j<=l; // Loop (2) from 1 to the length of the String (exclusive)
p("", // Call the permutation-method,
s.substring(i,j+++1),l)); // with a substring from `i` to `j` (inclusive)
// End of loop (2) (implicit / single-line body)
// End of loop (1) (implicit / single-line body)