程序预览图:
输入的第一行表示一共要排列多少个字符串
其后输入的每行表示一个字符串
import java.io.*;
import java.util.*;
/**
* 字典排序
*
* @author 黑色珊瑚 tsorgy
* @version 1.0
*/
public class StringOrder {
/**
* @param args
*/
public static void main(String[] args) {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String[] strings;
try {
int n=Integer.parseInt(br.readLine());
strings=new String[n];
} catch (NumberFormatException nfe) {
System.out.println("输入的数字不合法!");
nfe.printStackTrace();
return;
} catch (IOException ioe) {
ioe.printStackTrace();
return;
}
for (int i=0; i<strings.length; ) {
try {
strings[i]=br.readLine();
i++;
} catch (IOException ioe) {
System.out.println("IO错误,此次输入不算");
ioe.printStackTrace();
}
}
for (int i=0; i<strings.length; i++) {
System.out.println("\nCase "+String.valueOf(i+1)+":");
orderString(strings[i]);
}
}
/**
* 排列某一字符串
* @param str 要排列的字符串
*/
private static void orderString(String str) {
LinkedList<String> lnkString=new LinkedList<String>();
char[] chars=str.toCharArray();
orderChar(chars);
str=String.valueOf(chars);
fillList("",str,lnkString);
for (int i=0; i<lnkString.size(); i++) {
System.out.println(lnkString.get(i));
}
}
/**
* 把字符串所有的排序可能放入 <code>LinkedList</code>
* @param print 临时的前排字符串
* @param str 临时的后排字符串
* @param lnkString 存放结果的 <code>LinkedList</code>
*/
private static void fillList(String print, String str, LinkedList<String> lnkString) {
if(str.length()==1) {
String string=print+str;
if (!lnkString.contains(string)) //如果这组排列已经有过了,则不加入(重复字符时)
lnkString.add(string);
}
for(int i=0;i<str.length();i++)
fillList(print+str.charAt(i),str.substring(0,i)+str.substring(i+1,str.length()),lnkString);
}
/**
* 从小到大排序字符数组<br>
* 比如:把 'z','C','B','a','A' 排序成 'A','a','B','C','z'
* @param chs 要排序的字符数组
*/
private static void orderChar(char[] chs) {
for (int i=1; i<chs.length; i++) {
for (int j=0; j<chs.length-i; j++) {
if (Character.toUpperCase(chs[j])>Character.toUpperCase(chs[j+1])) {
char c=chs[j];
chs[j]=chs[j+1];
chs[j+1]=c;
} else if (chs[j]>chs[j+1]) { //为了保证把'a','A','a'排序成'A','a','a'
char c=chs[j];
chs[j]=chs[j+1];
chs[j+1]=c;
}
}
}
}
}
posted on 2008-06-07 15:29
Tsanie 阅读(2881)
评论(0) 编辑 收藏 引用 所属分类:
个人作品