[英]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.valueOf
、 Double.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.