package com.itheima.exam;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;
import java.util.TreeSet;
/**
* 8、 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符, 例如:原始字符串是"abc",
* 打印得到下列所有组合情况: "a" "b" "c"
* "ab" "bc" "ca" "ba" "cb" "ac" "abc" "acb" "bac" "bca" "cab" "cba"
*/
public class Test8
{
public static void main(String[] args)
{
//需要操作的字符串
String str = "abcefgjt";
//临时存放生成的元数
List<String> con = new ArrayList<String>();
//存放最终结果,用来去掉List集合中重复的元数
Set<String> set = new TreeSet<String>();
searchAndAdd(str, con);
ListToSet(con, set);
}
//排列字符串组合
private static void searchAndAdd(String str, List<String> con)
{
//把原始的str分解,添加到list集合中
if (con.size() == 0)
{
for (int i = 0; i < str.length(); i++)
{
con.add(str.substring(i, i + 1));
}
}
//根据传入的字符串长度来控制循环次数
for (int i = 0; i < str.length(); i++)
{
//用ListIterator来动态的操作集合中的元数
ListIterator<String> lt = con.listIterator();
//截取字符串中的一个字符串
String st = str.substring(i, i + 1);
//循环迭代集合
while (lt.hasNext())
{
//拿出集合中的一个元数
String sb = lt.next();
//判断集合中的一个元数是否包含字符串中取到的当前这个子字符串,
//如果不包含就在这个元数的前后加上这个子字符串
if (!sb.contains(st))
{
lt.add(sb + st);
lt.add(st + sb);
}
}
}
}
//去重复元数并迭代输出
private static void ListToSet(List<String> con, Set<String> set)
{ //把LIST中的元数添加到set集合中,这样能把重复的元数去掉
for (String sb : con)
{
set.add(sb);
}
//迭代Set集合得到我们想要的结果
for (String obj : set)
{
System.out.println(obj);
}
}
}
|
|