fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.math.BigInteger;
  4. import java.util.Iterator;
  5.  
  6. class Substrings{
  7.  
  8. private class SubstringIterator implements Iterator<String> {
  9.  
  10. String s;
  11. BigInteger cur = BigInteger.ZERO;
  12.  
  13. public SubstringIterator(String s) {
  14. this.s = s;
  15. max = BigInteger.ONE.shiftLeft(s.length()).subtract(BigInteger.ONE);
  16. }
  17.  
  18. @Override
  19. public boolean hasNext() {
  20. return cur.compareTo(max) < 0;
  21. }
  22.  
  23. @Override
  24. public String next() {
  25. cur = cur.add(BigInteger.ONE);
  26. StringBuilder sb = new StringBuilder();
  27. for(int i = 0x00; i < s.length(); i++) {
  28. if(cur.testBit(i)) {
  29. sb.append(s.charAt(i));
  30. }
  31. }
  32. return sb.toString();
  33. }
  34.  
  35. @Override
  36. public void remove() {
  37. throw new UnsupportedOperationException("This is not a collection iterator");
  38. }
  39.  
  40.  
  41. }
  42.  
  43. public void run () {
  44. String s = "abcd";
  45. SubstringIterator ssi = new SubstringIterator(s);
  46. while(ssi.hasNext()) {
  47. System.out.println(ssi.next());
  48. }
  49. }
  50.  
  51. public static void main(String []args){
  52. new Substrings().run();
  53. }
  54. }
Success #stdin #stdout 0.11s 320256KB
stdin
Standard input is empty
stdout
a
b
ab
c
ac
bc
abc
d
ad
bd
abd
cd
acd
bcd
abcd