繁体   English   中英

如何从命令行读取字符串而不接受整数作为参数

[英]How to read String from a command Line and Not to accept an integer as an arguement

我正在尝试使用 Java 从命令行获取参数 例如,

java nameOfTheProgram name1 name2

该程序应该只读取字符串而不接受任何整数数字,例如:

java nameOfTheProgram name1 5 / ----

我想让程序粉碎,使其只接受字符串

我尝试使用String name1 = String.valueOf(args[0]); -- 它工作完美,但它接受 5 作为参数

    private  static void testString(Object data) throws Exception {
            if(data instanceof String)
             System.out.println(String.valueOf(data));
            else throw new Exception("error number");
        }

Main.testString(5);

Exception in thread "main" java.lang.Exception: error number
    at test.main.TestImage.testString(TestImage.java:18)
    at test.main.TestImage.main(TestImage.java:32)

我建议使用以下方法来检查 arg 是否为数字:

1)您可以使用Long.valueOfDouble.valueOf并捕获NumberFormatException

public class NumberFilter {
    public static void main(String[] args) {
        if (isNumber(args[0])) {
            throw new IllegalArgumentException("Number is not allowed " + args[0]);
        }
    }

    private static boolean isNumber(String value) {
        try {
            Long.valueOf(value);
        } catch (NumberFormatException e) {
            return false;
        }
        return true;
    }
}

2) Apache Commons NumberUtils.isCreatable(String)

3) Apache Commons StringUtils.isNumeric(CharSequence)

4)Java正则表达式:

public static boolean isNumber(String value) {
    return Pattern.compile("-?\\d+(\\.\\d+)?")
                  .matcher(strNum).matches();
}

PS:我最喜欢的是 Apache Commons StringUtils.isNumeric(...)

您可以使用正则表达式。

if(!nameOfTheProgram.matches("^[a-zA-Z]*$")) {
    // throw Exception
}   

我会检查字符串中是否存在单个数字:

String name1 = String.valueOf(args[0]);
if (name1.matches(".*[0-9].*")) {
    throw new IllegalArgumentException("input cannot contain numbers");
}

暂无
暂无

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

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