繁体   English   中英

从多个命令行参数打印较少的字符串

[英]Print lesser string from multiple command-line arguments

我想扩展当前程序以接受任意数量的命令行参数,并输出其中较小的一个(区分大小写)。 当前情况如下:

public class StringCompare {

    public static void main(String[] args) {

        String s1 = new String(args[0]);
        String s2 = new String(args[1]);

        if (s1.compareTo(s2) > 0) {
            System.out.println(s2);
        }
        else if (s1.compareTo(s2) < 0) {
            System.out.println(s1);
        }
        else {
            System.out.println("Both are equal.");
        }       
    }
}

我所追求的例子:

Input: aaa aa a aAa

Output: a

有什么优雅的方法可以解决这个问题?

使用Java 8语法和lambda,您可以执行以下操作:

编辑(根据@Aominè的评论建议)

public static void main(String[] args) {

    String min = Arrays.stream(args)
             .min(String::compareTo)
           .orElse("<none>");

    System.out.println(min);
}


如果您想知道所有字符串是否相等,则可能需要添加一个附加步骤来检查它:

 public static void main(String[] args) { String min = Arrays.stream(args) .min(String::compareTo) .orElse("<none>"); if (!Arrays.stream(args) .allMatch(x-> x.equals(min))) { System.out.println(min); } else { System.out.println("All are equal."); } } 

使用for循环和temp(较小)String变量。

//validate args , not null, and length != 0

if(args == null || args.length ==0){
    System.out.println("No strings to compare");
    return;
}
string lesser = args[0]; // assume 1st argument is the lesser.
for(int a=0;a<args.length;a++){
    if (lesser.compareTo(args[a]) > 0) {
        lesser = args[a];// the new lesser string
    }
    //we ignore other cases (args[a] is larger or equals, cuz we want lesser only
}

System.out.println("Lesser String is " + lesser);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM