1 package FushiExam;
2 import java.util.*;
3 public class Text_40 {
4
5 public static void main(String[] args) {
6 //对Stringnum=5个字符串排序
7 int Stringnum=5;
8 Scanner scan=new Scanner(System.in);
9 String[] str=new String[Stringnum];
10 System.out.println("输入各个字符串:");
11 for(int i=0;i<Stringnum;i++) {
12 str[i]=scan.nextLine();
13 }
14 for(int i=str.length-1;i>0;i--) {//冒泡排序循环
15 for(int j=0;j<i;j++) {
16 if(compare(str,j,j+1))//两个两个比较
17 swap(str,j,j+1);
18 }
19
20 }
21 System.out.println("最终结果是:");
22 for(int i=0;i<Stringnum;i++) {
23 System.out.println(str[i]);
24 }
25
26
27 }
28 public static boolean compare(String[] arr,int i,int j) {//比较函数
29 int flag=0;
30 //System.out.println(arr[i]+" 和 "+arr[j]+"比较.......");
31 boolean result=false;//设定初始值
32 for(int k=0;k<arr[i].length()&&k<arr[j].length();k++) {//每个字符串中的各个字符比较
33 if(arr[i].charAt(k)>arr[j].charAt(k)) {//如果 第一个字符串k位置比第二个字符串的k位置大,则两个字符串交换位置
34 result=true;
35 break;
36 }
37 else if(arr[i].charAt(k)<arr[j].charAt(k)) {//如果 第一个字符串k位置比第二个字符串的k位置小,则两个字符串不交换位置
38 result=false;
39 break;
40 }
41 //默认有个else,代表当arr[i].charAt(k)=arr[j].charAt(k);时,比较下一个数
42 flag=k+1;//当k++=arr[i].length||k++=arr.length时,说明某一个字符串,是另一个字符串的前一部分
43
44 }
45 if(flag>=arr[i].length()||flag>=arr[j].length())//当某一个字符串,是另一个字符串的前一部分时 如:abcd和abc比较,长度较长的字符串,在短的后边
46 {
47 if(arr[i].length()>arr[j].length()) {
48 result=true;
49 }
50 else {
51 result=false;
52 }
53 }
54 return result;
55 }
56 public static void swap(String [] str,int i,int j) {
57 System.out.println(str[i]+"与"+str[j]+"交换");
58 String temp=str[i];
59 str[i]=str[j];
60 str[j]=temp;
61 //System.out.println("交换结果"+str[i]+"---+"+str[j]);
62 }
63 }