How to get combination of characters from a String?

Use the following program to get the list of combination of characters from a String.

 /**
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

import java.util.ArrayList;
import java.util.List;

public class Combination
{
        public static void main(String[] args)
        {
                Combination c = new Combination();

                List<String> lstStr = c.getCombinations("dive");

                for (String in : lstStr)
                {
                        System.out.println(in);
                }
        }

        public List<String> getCombinations(String num)
        {
                List<String> lstInt = new ArrayList<String>();
                if (num.length() == 2)
                {
                        lstInt.add((num));
                        lstInt.add(reverseStr(num));
                        return lstInt;
                }
                else if (num.length() == 1)
                {
                        lstInt.add((num));
                        return lstInt;
                }
                else
                {
                        for (int i = 0; i < num.length(); i++)
                        {
                                List<String> tempInt = getCombinations(getRemovedChar(num, i));

                                lstInt.addAll(appendStr(tempInt, num.charAt(i)));
                        }
                }
                return lstInt;
        }

        public List<String> appendStr(List<String> numLst, char g)
        {
                List<String> finalLst = new ArrayList<String>();
                for (String r : numLst)
                {
                        finalLst.add(r + g);
                }
                return finalLst;
        }

        public String getRemovedChar(String s, int i)
        {
                StringBuilder sb = new StringBuilder();
                for (int j = 0; j < s.length(); j++)
                {
                        if (j != i)
                                sb.append(s.charAt(j));
                }
                return sb.toString();
        }

        public String reverseStr(String s)
        {
                StringBuilder sb = new StringBuilder();
                for (int j = s.length() - 1; j >= 0; j--)
                {
                        sb.append(s.charAt(j));
                }
                return sb.toString();
        }
}

Output:

veid
evid
ievd
eivd
ived
vied
vedi
evdi
devi
edvi
dvei
vdei
iedv
eidv
deiv
ediv
diev
idev
ivde
vide
dvie
vdie
dive
idve

Search