0

ファーストネームとラストネームで入力したい。その後、名前に基づいて並べ替えが行われ、名前と名前が表示されます。。たとえば。

入力:-

John smith 
Albert kennedy
John dsouza

出力

John dsouza
Albert kennedy
John smith
4

6 に答える 6

1

あなたはあなた自身を作成し​​、与えられたに応じてComparatorソートする必要があります。これがデモです:ListComparator

import java.util.*;
class  SortLastName
{
    public static void main(String[] args) 
    {
        List<String> list= new ArrayList<String>();
        list.add("John smith");
        list.add("Albert kennedy");
        list.add("John dsouza");
        System.out.println("Before sorting :"+list);
        Collections.sort(list,new myComparator());
        System.out.println("After sorting :"+list);
    }
    static class myComparator implements Comparator<String>
    {
        public int compare(String str1,String str2)
        {
            String[] tokens1 = str1.split("\\s+");
            String[] tokens2 = str2.split("\\s+");
            int i = tokens1[1].compareTo(tokens2[1]);
            return i;
        }
    }
}
于 2013-03-25T15:25:34.013 に答える
0

これらを調べてみてください、彼らは助けるべきです

文字列分割 http://javarevisited.blogspot.co.uk/2011/09/string-split-example-in-java-tutorial.html

コレクションの並べ替え http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html

于 2013-03-25T15:02:16.597 に答える
0

独自のコンパレータを実装し、 Collections.sort()を使用します

于 2013-03-25T15:04:33.813 に答える
0

カスタム文字列コンパレータを使用して、これを実現できます。

public class LastNameComparator implements Comparator<String>{

    public int compare(String object1, String object2) {

        String name1 = object1.split("\\s+")[1].toUpperCase();
        String name2 =  object1.split("\\s+")[1].toUpperCase();

        return name1.compareTo(name2);

    }

}

次に、Collectionssortmetholdを使用します

Collections.sort(namesList, new LastNameComparator());

名前にスペースがない場合のArrayOutofBoundExceptionや、名前に複数の部分がある場合の予期しない結果を回避するために、入力が「FirstNameLastName」形式と一致することを確認する必要があることに注意してください。

于 2013-03-25T15:07:31.333 に答える
0
String[] names = { "John smith", "Albert kennedy", "John dsouza" };
Arrays.sort(names, new Comparator<String>() {

    @Override
    public int compare(String firstName, String lastName) {
        return firstName.split("\\s+")[1].compareTo(lastName.split("\\s+")[1]);
    }

});
System.out.println(Arrays.toString(names));

または、次のようにそれを行うメソッドを作成します

private static Object[] sortLastName(Object[] a) {
    Object[] temp = new Object[a.length];

    for (int i = 0; i < temp.length - 1; i++) {
        if (a[i].toString().split("\\s+")[1].compareTo(a[i + 1].toString()                  .split("\\s+")[1]) < 0) {
            temp[i] = a[i];
            temp[i + 1] = a[i + 1];
        }
     }

    return temp;
}
于 2013-03-25T16:01:09.917 に答える
0
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/**
 *
 * @author pramod
 */
public class SortNames {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    String name1 = "John Smith";
    String name2 = "Albert kennedy";
    String name3 = "John dsouza";
    String name4 = "John Dsouza";
    String name5 = "Mark Smith";
    String name6 = "john Kennedy";

    ArrayList<String> inputStringList = new ArrayList<String>();
    inputStringList.add(name1);
    inputStringList.add(name2);
    inputStringList.add(name3);
    inputStringList.add(name4);
    inputStringList.add(name5);
    inputStringList.add(name6);
    System.out.println(inputStringList);
    System.out.println("\n\n\n");
    ArrayList<Name> nameList = sortByLastNames(inputStringList);
    System.out.println(nameList);


}

public static class Name implements Comparator<Name> {

    String fname;
    String lname;

    public Name() {
    }

    public Name(String fname, String lname) {
        this.fname = fname;
        this.lname = lname;
    }

    @Override
    public String toString() {
        return fname + " " + lname;
    }
    /*
     * Writing custom comparator to compare both the names. Code will
     * compare based on last name and then first name (ignores cases).
     */

    @Override
    public int compare(Name o1, Name o2) {
        return o1.lname.compareToIgnoreCase(o2.lname) != 0
                ? o1.lname.compareToIgnoreCase(o2.lname)
                : o1.fname.compareToIgnoreCase(o2.fname);
    }
}

/**
 * Code will split based on the first space.
 * Uses trim to remove the leading and ending spaces. Then,
 * Considers the string before first space as fname and string after first space as lname.
 * @param inputStringList - ArrayList<String> - input list of Strings that
 * needs to be sorted as names
 * @return - ArrayList<Name> - output List of Names that are sorted.
 */
public static ArrayList<Name> sortByLastNames(ArrayList<String> inputStringList) {
    if (inputStringList == null) {
        return null;
    }
    ArrayList<Name> nameList = new ArrayList<Name>();
    for (String fullName : inputStringList) {
        if (fullName != null && fullName.trim().equalsIgnoreCase("")) {
            int firstSpace = fullName.trim().indexOf(' ');
            String fname = "";
            String lname = "";
            if (firstSpace != -1) {
                fname = fullName.substring(0, firstSpace).trim();
                lname = fullName.substring(firstSpace, fullName.length()).trim();
            } else {
                fname = fullName;
                lname = "";
            }
            Name name = new Name(fname, lname);
            nameList.add(name);
        }
    }
    Collections.sort(nameList, new Name());
    return nameList;
}

}

于 2013-03-25T16:03:48.393 に答える