2017-02-22 73 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 –