随笔 - 28  文章 - 0 评论 - 77 
<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(27)

随笔分类(25)

随笔档案(28)

文章分类

相册

首页连接

搜索

  •  

积分与排名

  • 积分 - 47216
  • 排名 - 124

最新评论

阅读排行榜

评论排行榜

程序预览图:
    输入的第一行表示一共要排列多少个字符串
    其后输入的每行表示一个字符串

 

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 阅读(2879) 评论(0)  编辑 收藏 引用 所属分类: 个人作品
只有注册用户登录后才能发表评论。