Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查Java程序参数的函数_Java_Arguments - Fatal编程技术网

检查Java程序参数的函数

检查Java程序参数的函数,java,arguments,Java,Arguments,我正在尝试以更干净的方式重新编写此代码: public static void main(String[] args) { if(checkArgs(args) < 0) return; return; } private static int checkArgs(String[] args) { if (args.length == 0) { System.out.println("Error: No Args");

我正在尝试以更干净的方式重新编写此代码:

public static void main(String[] args) {
    if(checkArgs(args) < 0) return; 
    return;
}

private static int checkArgs(String[] args) {       
    if (args.length == 0) {
        System.out.println("Error: No Args");
        return -1;
    }
    try{ //If it's a number
        int myNumber = Integer.parseInt(args[0]);
        System.out.println("My number is: " + myNumber);
    }
    catch (Exception e) {//If it's a String
        try{
            String[] myStr = args ;
            System.out.print("My String is ");
            for (int i=0; i<args.length; i++) {
                myStr[i] = args[i];
                System.out.print(myStr[i]);
            }
            System.out.print("\n");
            return 0;
        }
        catch(Exception err){
            System.out.println("Error");
            return -1;
        }
    }
    return 0;
}
publicstaticvoidmain(字符串[]args){
if(checkArgs(args)<0)返回;
返回;
}
私有静态int checkArgs(字符串[]args){
如果(args.length==0){
System.out.println(“错误:无参数”);
返回-1;
}
如果是一个数字,请尝试{//
int myNumber=Integer.parseInt(args[0]);
System.out.println(“我的号码是:“+myNumber”);
}
catch(异常e){//如果是字符串
试一试{
字符串[]myStr=args;
System.out.print(“我的字符串是”);

对于注释中提到的(int i=0;i),您的代码存在编译问题。就逻辑而言,要确定输入字符串是否只包含数字,可以使用如下所示的正则表达式

Pattern p = Pattern.compile("^-?[0-9]+$");

if(p.matcher(arg[0]).matches()) {
    System.out.println("It's a number!!");
} else {
    System.out.println("Not a number.");
}
在这种情况下,您不必使用
try/catch
块。

像这样尝试

public class CheckArgs {

    public static void main(String[] args) {
        if (args != null && args.length != 0) {
            for (String arg : args) {
                System.out.println(String.format("<----- %s ----->", arg));
                System.out.println(String.format("is number %s", checkIfNumber(arg)));
                System.out.println(String.format("is string %s", checkIfString(arg)));
                System.out.println(String.format("<-------------->", arg));
            }
        }
    }

    private static boolean checkIfString(Object arg) {
        if (arg instanceof String) {
            return true;
        }
        return false;
    }

    private static boolean checkIfNumber(Object arg) {
        if (arg instanceof Integer) {
            return true;
        }
        return false;
    }
}
公共类CheckArgs{
公共静态void main(字符串[]args){
如果(args!=null&&args.length!=0){
for(字符串arg:args){
System.out.println(String.format(“,arg));
System.out.println(String.format(“是数字%s”,checkIfNumber(arg)));
System.out.println(String.format(“是字符串%s”,checkIfString(arg));
System.out.println(String.format(“,arg));
}
}
}
私有静态布尔checkIfString(对象arg){
if(arg instanceof String){
返回true;
}
返回false;
}
私有静态布尔checkIfNumber(对象参数){
if(arg instanceof Integer){
返回true;
}
返回false;
}
}

首先,您不需要第二个
尝试…catch
。此代码:

        String[] myStr = args ;
        System.out.print("My String is ");
        for (int i=0; i<args.length; i++) {
            myStr[i] = args[i];
            System.out.print(myStr[i]);
        }
        System.out.print("\n");
        return 0;
将执行相同的操作,并且不会抛出异常

现在,对于检查整数,我认为像这样使用它并捕获异常就足够了。只需捕获
NumberFormatException
而不是
exception
。实现全面捕获从来都不是一个好主意

但如果你坚持一种方法而不尝试捕捉,你可以这样做:

private static boolean checkInt(String str) {
    if ( ! str.matches("-?0*[0-9]{1,10}")) {
        return false;
    }
    long l = Long.valueOf(str);
    if ( l > Integer.MAX_VALUE || l < Integer.MIN_VALUE) {
        return false;
    }
    System.out.println("My number is: " + myNumber);
    return true;
}
如果没有它,请使用我的
checkInt()
方法:

private static int checkArgs2(String[] args) {
    if (args == null || args.length == 0) {
        System.out.println("Error: No Args");
        return -1;
    }
    if ( ! checkInt(args[0])) {
        // If it's a String
        String[] myStr = args;
        System.out.print("My String is ");
        for (int i = 0; i < args.length; i++) {
            myStr[i] = args[i];
            System.out.print(myStr[i]);
        }
        System.out.print("\n");
        return 0;
    }
    return 0;
}
private static int checkArgs2(字符串[]args){
if(args==null | | args.length==0){
System.out.println(“错误:无参数”);
返回-1;
}
如果(!checkInt(args[0])){
//如果是字符串
字符串[]myStr=args;
System.out.print(“我的字符串是”);
对于(int i=0;i

不过,我不确定您的检查有多有用。通常,参数检查是在准备使用args执行某些操作时进行的,您不会将有关它是数字还是字符串的信息保存在任何位置。

这里的方法中似乎有一个方法……事实上,这段代码根本不编译。它位于中的方法中t检查参数(字符串参数[])该方法本身也不会编译,无法访问最终的
返回0;
。请给出实际编译和运行的代码。最好遵循一些约定,例如使用小写字母命名变量。提示:在尝试访问
args[0]之前,还应检查数组是否包含任何元素
或其他。仅此一项是不够的。
Integer.parseInt
如果值超出
int
范围,也会引发异常,例如对于
Integer.parseInt(“9999999999”)
,请参阅
private static int checkArgs1(String[] args) {
    if (args == null || args.length == 0) {
        System.out.println("Error: No Args");
        return -1;
    }
    try { // If it's a number
        int myNumber = Integer.parseInt(args[0]);
        System.out.println("My number is: " + myNumber);
    } catch (NumberFormatException e) {// If it's a String
        String[] myStr = args;
        System.out.print("My String is ");
        for (int i = 0; i < args.length; i++) {
            myStr[i] = args[i];
            System.out.print(myStr[i]);
        }
        System.out.print("\n");
        return 0;
    }
    return 0;
}
private static int checkArgs2(String[] args) {
    if (args == null || args.length == 0) {
        System.out.println("Error: No Args");
        return -1;
    }
    if ( ! checkInt(args[0])) {
        // If it's a String
        String[] myStr = args;
        System.out.print("My String is ");
        for (int i = 0; i < args.length; i++) {
            myStr[i] = args[i];
            System.out.print(myStr[i]);
        }
        System.out.print("\n");
        return 0;
    }
    return 0;
}