我编写了一个程序,要求用户将名称输入到数组中,然后名称按字母顺序排序......程序运行良好,但我想知道是否可以对第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 + " ");
}
}
}
}
答案 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。