有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果args[I]的类型不是Java中预期的类型,我如何返回错误消息?是否有“型式试验”功能?

这是一个类,在CMD提示符中输入字符串和整数,即“Hello”4,然后重复字符串4次。这不是一个问题,也可以工作,但是如果第二个参数(arg[1])不是正整数(args[1]>;0),或者它通常不是整数类型,我想返回一条错误消息(即“Invalid argument”)。我可以测试它是否为正整数,但我可以手工比较字符串数组的内容是否可解析为整数

public class Repeat {

public static void main(String[] args) { 
    System.out.println(parseAndRep(args));
}
public static String parseAndRep(String[] args){ 
    if (args.length<2){
        return"Error: insufficient arguments";
    }
    if (Integer.parseInt(args[1]<1) || **//TODO Work out if correct type**) {
        return "Error: second argument not a valid positive integer";
    }

    int n = Integer.parseInt(args[1]);
    String repeatstring = args[0];
    while (n!=1){
        repeatstring = repeatstring +" "+ args[0];
        n= n-1;
    }
    return repeatstring;
}

共 (3) 个答案

  1. # 1 楼答案

    main()方法的args参数的类型始终为String[]。您想要做的是而不是检查类型(这完全是另一种含义),但是您想要查看您拥有的String实例是否可以解析为整数。为此,您可以始终检查字符串是否与仅接受数字的正则表达式匹配:

    if(!args[1].matches("\\d+"); {
       return "Error: second argument is not a valid positive integer";
    }
    
  2. # 2 楼答案

    String args1 = "12345678";
            boolean isNumber = args1.matches ("-?\\d+");
            if(!isNumber){
                // throw exception
            }
            //do parsing
            System.out.println(isNumber);
    

    上述表达式验证数值,以防需要扩展以支持可能使用的小数 -?\\d+(\\.\\d+)?

  3. # 3 楼答案

    您可能会在以下语句的指定位置处遇到编译错误:

    if (Integer.parseInt(args[1]<1) || **//TODO Work out if correct type**) {
                                ^
    

    这是因为args[1]是一个字符串,不能将字符串与<进行比较。你可能想做的是

    if (Integer.parseInt(args[1])<1 || **//TODO Work out if correct type**) {
    

    args[1]解析为int后,再将其与值1进行比较时,此语句将执行此操作。问题是,如果数字不是整数,这将引发NumberFormatException

    您可以使用StringUtils检查字符串是否为数字。isNumeric来自commons-lang库,它有一个非常好和高效的实现