2017-02-22 68 views
1

我正在嘗試編寫一個程序,該程序按照姓氏排序,並在應用「排序」條件時輸入名字。輸入將從命令行提供。我已經開始這種方式,但不知道如何使其工作。如何從java中的命令行對姓氏進行排序

輸入:排序 「約翰主」, 「搶班」, 「鮑勃·公羊」

輸出:類,搶主,約翰RAM,BOB

public static void main(String[] args) 
{ 
    String[] args_name = new String[args.length-1]; 
    System.arraycopy(args, 1, args_name, 0, args.length-1); 

    if(args[0].equals("sort")) 
    { 
     String firstName = name.substring(args_name,name.indexOf(" ")); 
     String lastName = name.substring(name.indexOf(" ")+1); 
     String slst = lastName + ", " + firstName; 

     Arrays.sort(slst); 

     for (String s: slst) System.out.print(s); 
    } 
} 
+1

哪裏是你的輸入來的呢?什麼是'args_name'?什麼是'名字'?顯示整個代碼。此代碼不能編譯。 – nhouser9

+0

你會給CMD名單嗎? –

+0

如果您正在讀取要從命令行排序的名稱,那麼您如何區分名字和姓氏? –

回答

0

嘗試使用比較排序您的輸入。爲了簡單起見,我刪除了您的參數相關的代碼。您仍然需要重新正確添加它。

所需導入

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

的名稱

class Name{ 
    public static final String FULL_NAME_DELIMITER = " "; 
    public static final String PRINT_DELIMITER = ", "; 

    private String firstName; 
    private String lastName; 

    public Name(String firstName, String lastName){ 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public static String[] getName(String fullName){ 
     return fullName.split(FULL_NAME_DELIMITER); 
    } 

    public String getLastName(){ 
     return this.lastName; 
    } 

    @Override 
    public String toString(){ 
     return String.join(PRINT_DELIMITER , this.lastName, this.firstName); 
    } 

    public void print(){ 
     System.out.println(this); 
    } 
} 

的比較

class NameComparator implements Comparator<Name>{ 
    @Override 
    public int compare(Name a, Name b) { 
     return a.getLastName().compareTo(b.getLastName()); // ASC: a to b or DESC: b to a 
    } 
} 

使用

public class Main { 
    // Holds the sorted names 
    private static List<Name> names = new ArrayList<>(); 

    public static void main(String[] args) { 
     // The input names 
     String[] input = new String[]{ 
       "john main", 
       "rob class", 
       "bob ram" 
     }; 

     // Prepare list for sorting 
     String firstName; 
     String lastName; 
     String[] completeName; 

     for (String fullName : input) { 
      completeName = Name.getName(fullName); 
      firstName = completeName[0]; 
      lastName = completeName[1]; 
      names.add(new Name(firstName, lastName)); 
     } 

     // Actually sort 
     names.sort(new NameComparator()); 

     // Print 
     names.forEach(System.out::println); 
    } 
} 

編輯

要在命令行中使用的輸入,在ARGS參數是要使用的東西。

與命令行輸入使用

public class Main { 
    // Holds the sorted names 
    private static List<Name> names = new ArrayList<>(); 

    public static void main(String[] args) { 
     // The method (in case something else than "sort" is desired) 
     String method = args[0]; 

     // Check for valid method 
     if(!method.equals("sort")) return; 

     // The input names 
     String[] input = Arrays.copyOfRange(args, 1, args.length); 

     // Prepare list for sorting 
     String firstName; 
     String lastName; 
     String[] completeName; 

     for (String fullName : input) { 
      completeName = Name.getName(fullName); 
      firstName = completeName[0]; 
      lastName = completeName[1]; 
      names.add(new Name(firstName, lastName)); 
     } 

     // Actually sort 
     names.sort(new NameComparator()); 

     // Print 
     names.forEach(System.out::println); 
    } 
} 

EDIT 2

要使用的第一個名字,而不是姓氏,只是改變比較。

class NameComparator implements Comparator<Name>{ 
    @Override 
    public int compare(Name a, Name b) { 
     return a.getFirstName().compareTo(b.getFirstName()); // ASC: a to b or DESC: b to a 
    } 
} 

當然,你需要調整名稱類以及通過增加:

public String getFirstName(){ 
    return this.firstName; 
} 
+0

我想輸入來自命令行 –

+0

@ K.Ji,我相應地更新了答案。 – mcuenez

+0

謝謝我現在已經這樣做了,我將如何垂直打印它? –

0

如果我明白你的問題以及這裏是我的代碼,解決這個問題

public static void shortName(String shortName){ 

    System.out.println("please enter yout name : "); 
    Scanner scanner = new Scanner(System.in); 
    String fullName = scanner.nextLine(); 

    if(shortName.equals("sort")){ 
     String [] nameArr = fullName.split(" "); 
     int lastNameIndex = nameArr.length - 1; 
     String name = nameArr[0] +" "+ nameArr[lastNameIndex]; 
     System.out.println("welcome : "+name); 
    } 
    else { 
     System.out.println("welcome : "+fullName); 

    } 

} 
public static void main(String[] args) { 

    shortName("sort"); 
} 
+0

輸入將從命令行:sort「john main」「rob class」「bob ram」輸出:class,rob main,john ram,bob –