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 }