如何通过每个字符串的第二个字符串对字符串数组进行排序?

时间:2016-02-15 06:09:14

标签: java arrays string sorting

我编写了一个程序,要求用户将名称输入到数组中,然后名称按字母顺序排序......程序运行良好,但我想知道是否可以对第2,第3个输入的每个名称进行排序,或每个字符串中的第4个字符?例如,如果用户输入Bob,Dan和Kris,程序应该将它们分类为Dan,Bob,Kris。这是我的程序,它按字符串的第一个字母对我的字符串数组进行排序:

  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.List;
  import java.util.Scanner;


public class SortingAnArrayOfStrings {




public static void main(String[] args) {


{
     //Ask the user for names to add to the array
     List<String> list=new ArrayList<String>();
     Scanner in=new Scanner(System.in);
     do {
         System.out.println(" The names on the list are "+list);
         System.out.println("Would you like to add another name to the list? (y/n)");

         if (in.next().startsWith("y")) {
             System.out.println("Enter:");
             list.add(in.next());
         }else{break;

        }
     } while (true);
    //display the names that have been added to the array
    System.out.println("The names on the list are "+list);

    //sort the array of names in alphabetical order
    String[] Arr=list.toArray(new String[list.size()]);
    String[] stringArray=new String[Arr.length];

     for(int i=0;i<Arr.length;i++)
     {
         for (int j = i+1; j < Arr.length; j++) {
             if (Arr[i].trim().compareTo(Arr[j].trim())>0) {
                 String temp=Arr[j];
                 Arr[j]=Arr[i];
                 Arr[i]=temp;
             }
         }
         stringArray[i]=Arr[i];
     }

     //display the sorted list of names
     System.out.println("This is the list of names after sorting them in alphabetical order : ");

     for(String ss:stringArray){
         System.out.print(ss + " ");

     }
  }

}
}

6 个答案:

答案 0 :(得分:3)

您可以使用自定义 java.util.Comparator 尝试类似下面的内容:

String[] names = {"Dan", "Bob", "Kris"};
java.util.Collections.sort(java.util.Arrays.asList(names), new java.util.Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        // TODO: Argument validation (nullity, length)
        return s1.charAt(1) - s2.charAt(1);//comparision
    }  
});

for (String name : names) System.out.println(name);

输出:

Dan
Bob
Kris

答案 1 :(得分:2)

您可以尝试这个,只需使用Lambda表达式添加自定义比较器(如果您使用的是Java 1.8或更高版本):

list.add("Bob");
list.add("Dan");
list.add("Kris");
Collections.sort(list, (s1, s2) -> {
    String sb1 = s1.substring(1);
    String sb2 = s2.substring(1);
    return sb1.compareTo(sb2);
    });

System.out.println("list = " + list);

结果:

list = [Dan, Bob, Kris]

答案 2 :(得分:0)

我没有测试过这个,但你可以试试这个。用这个替换你的代码的条件部分。 但是,可能存在一些性能问题。

if (Arr[i].trim().compareTo(Arr[j].trim())>0) {

替换为:

if (Arr[i].trim().charAt(nthChar) > Arr[j].trim().charAt(nthChar)) {

nthChar是要比较的字符位置。

答案 3 :(得分:0)

以下是经过测试的示例代码。您需要使用比较器来实现订单。 这里的订单价值可以根据您的要求而定。您可以使用此替换当前代码,因为它也适用于正常排序(基于索引0)。根据您的需要,可能需要进行一些调整。

 String str[] = {"abc","bca","avc","ert"};
    final int ORDER = 1;
    Arrays.sort(str, new Comparator<String>() {

        @Override
        public int compare(String o1, String o2) {
           return o1.toLowerCase().charAt(ORDER) -  o2.toLowerCase().charAt(ORDER) ;
        }
    });

答案 4 :(得分:-1)

根据需求添加java.util.Comparator的不同实现并使用

集合类中的

public static <T> void sort(List<T> list, Comparator<? super T> c)用于对列表进行排序。

答案 5 :(得分:-2)

您想使用custom comparator