如果是某个类型的参数,如何跳过

时间:2019-02-28 05:44:56

标签: java

因此,我试图弄清楚如何在包含某个特定类型的参数时跳过该参数:

args:蓝色3红色7绿色5黄色2

我想将数字存储在数组中,将颜色存储在单独的数组中。因此,如果args [i]是字符串,则将其存储在颜色数组中,如果它是int,则将其存储在numbers数组中。诸如if(args [i] == String)然后类似,依此类推。显然这是行不通的,所以我正在寻找其他解决方案。

        const options = {
            url: `${this.endpoint}/API/${url}`,
            withCredentials: true
        };

        const response = await request(options);
        return JSON.parse(response);

非常感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

尝试一下:

public class Main {

    public static void main(String[] args) {
        List<String> colors = new ArrayList<>();
        List<Integer> numbers = new ArrayList<>();

        for (int i = 0; i < args.length; i++) {
            try {
                numbers.add(Integer.parseInt(args[i]));
            } catch (NumberFormatException e) {
                colors.add(args[i]);
            }
        }

        String[] colorsArray = colors.toArray(new String[0]);
        int[] number = numbers.stream().mapToInt(num -> num).toArray();
    }
}

答案 1 :(得分:1)

尝试一下

public class Main {
    public static void main(String[] args)
    {
        String[] colors = new String[args.length] ;
        int color_ix=0;
        int number_idx=0;
        Integer[] number = new Integer[args.length] ;
        for(int i = 0; i < args.length; i++)
        {
            if(args[i]==null) {continue;}
            try
            {
               number[number_idx]=Integer.parseInt(args[i]);
               number_idx++;
            }
            catch(NumberFormatException e)
            {
              colors[color_ix]=args[i];
              color_ix++;
            }
        }
        System.out.println("-----Number-----");
        for(int i=0;i<number_idx;i++)
        {
          System.out.println(number[i]);
        }
        System.out.println("-----Colors-----");
        for(int i=0;i<color_ix;i++)
        {
          System.out.println(colors[i]);
        }
    }
}

输出 $ java主要蓝色绿色3红色2黑色1

-----Number-----
3
2
1
-----Colors-----
Blue
Green
Red
Black

答案 2 :(得分:1)

您可以简单地

1。。为数字和字符串创建ArrayList

2。。根据 regex 匹配项向列表中添加值,该匹配项会检查参数是数字还是字符串

3。。将ArrayList转换为arrays

public static void main(String[] args) {

    List<Integer> numberList = new ArrayList<>();
    List<String> strList = new ArrayList<>();

    for (int i = 0; i < args.length; i++) {
        if (Pattern.matches("-?\\d+", args[i])) {
            numberList.add(Integer.parseInt(args[i]));
        } else {
            strList.add(args[i]);
        }
    }
    String[] colors  = strList.toArray(new String[0]);
    int[] number = ArrayUtils.toPrimitive(numberList.toArray(new Integer[numberList.size()]));
}

答案 3 :(得分:1)

您可以使用Apache Commons Lang StringUtils.isNumeric来检查它是否为数字。

If a node fails, the load is spread evenly across other nodes in the cluster".

答案 4 :(得分:0)

public static void main(String[] args) {
    // args = Blue 3 Red 7 Green 5 Yellow 2
    String[] colors = Arrays.stream(args).filter(str -> str.matches("\\D+")).toArray(String[]::new);
    int[] number = Arrays.stream(args).filter(str -> str.matches("[-+]?\\d+")).mapToInt(Integer::parseInt).toArray();

    System.out.println(Arrays.toString(colors));    // [Blue, Red, Green, Yellow]
    System.out.println(Arrays.toString(number));    // [3, 7, 5, 2]
}