package com.itheima;
import java.util.ArrayList;
import java.util.Scanner;
/**
* 第6题、编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符。 例如:<br>
* 原始字符串是"abc",打印得到下列所有组合情况:<br>
* "a" "b" "c" <br>
* "ab" "bc" "ca" "ba" "cb" "ac"<br>
* "abc" "acb" "bac" "bca" "cab" "cba"<br>
*
* @author wot_wangjinxin
* @version 1.0
*
*/
public class Test6 {
public static void main(String[] args) {
// 新建对象,调用对象的运行方法
new Test6().run();
}
/**
* 程序的运行入口方法<br>
* run the program method
*/
public void run() {
String str;
// 调用欢迎语句方法,给予用户使用提示
welcome();
// 循环从键盘获取数据,输入exit为退出
Scanner sc = new Scanner(System.in);
while (!(str = sc.nextLine()).equals("exit")) {
// 判断为非空字符串
if (!str.equals("")) {
printCombination(str);
}
}
// 关闭流,释放资源
sc.close();
System.out
.println("====================Test6 exit======================");
}
/**
* 欢迎语句方法,对程序进行说明<br>
* welcome text
*/
public void welcome() {
System.out
.println("=======================Test6========================");
System.out.println("Please input a string or 'exit' to quit:");
}
/**
* print the string's all combination. <br>
* 打印字符串组合方法 <br>
* 先取字符串的单个字符,根据这些字符分别拼接出长度为2,3。。。直至长度和原字符串相同的字符串
*
* @param str
* 将要进行组合的字符串<br>
* the sting want to combination
*/
public void printCombination(String str) {
// 定义一个字符数组,并将字符串转换为字符数组后放入
char[] ch = new char[str.length()];
ch = str.toCharArray();
// 对字符串进行判断是否有重复字符
for (int i = 0; i < ch.length; i++) {
for (int j = i + 1; j < ch.length; j++) {
if (ch[i] == ch[j]) {
System.out.println("字符串中含有重复的字符,请重新输入!");
return;
}
}
}
// tempArr save temporary info, resultArr save the result
// 定义两个List集合. tempArr用于存储临时数据,resultArr用于存储结果数据
ArrayList<String> tempArr = new ArrayList<String>();
ArrayList<String> resultArr = new ArrayList<String>();
// 先获取所有长度为1的字符串到集合
for (int i = 0; i < ch.length; i++) {
resultArr.add(ch[i] + "");
}
// 分别循环取出长度为i的字符串
// 再与基字符串(长度为1的字符串)进行拼接获得i+1长度的字符串
for (int i = 1; i < ch.length; i++) {
// 取出对应长度i的字符串,放入临时集合
for (String t : resultArr) {
if (t.length() == i) {
tempArr.add(t);
}
}
// 取出临时集合中的字符串,进行拼接
for (String t : tempArr) {
for (int j = 0; j < ch.length; j++) {
// 将不包含有对应基字符串的长度为i+1新字符串存入结果集合
if (!t.contains(ch[j] + "")) {
resultArr.add(t + ch[j]);
}
}
}
// 清空临时集合
tempArr.clear();
}
// 定义计数变量,用于打印
int count = 0;
// 打印结果
System.out.println("All Combinations:");
for (String t : resultArr) {
System.out.print(t + " ");
count++;
if (count % ch.length == 0) {
System.out.println();
}
}
}
}
|
|