在if条件中声明数组的解决方法

时间:2014-07-11 09:55:52

标签: java arrays if-statement split declaration

我对这部分代码有一个问题,我希望能够声明一个数组,其大小应该是字符串中相应的分割数。 或者我是否需要计算字符串中的逗号数并相应地分配大小,或者是否有更好的解决方案。

    String MapPath2[];
    if(type.equals("comparative"))
        MapPath2[]=args[1].split(",");

我最近没有机会在java中编写代码。如果这是一个愚蠢的问题请指责我并指导我作为菜鸟。感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

您无需声明尺寸,如果删除额外的[],您所拥有的就是没有问题:

String MapPath2[];
if(type.equals("comparative"))
    MapPath2=args[1].split(",");

数组split给你回复的大小。如果您需要知道结果大小,请使用MapPath2.length(在分配之后)。

您可能也希望在else中执行某些操作,以便MapPath2具有明确的值:

String MapPath2[];
if(type.equals("comparative"))
    MapPath2=args[1].split(",");
else
    MapPath2=null;

或更简洁:

String MapPath2[];
MapPath2 = type.equals("comparative") ? args[1].split(",") : null;

(而不是那里的null如果有一个空数组是后续逻辑的首选,有时候很方便,请将null替换为new String[0]以上其他时候,将null作为“无数据”标志会更方便。)


旁注:Java世界中有一些压倒性常见代码样式约定,建议您最好在代码中使用这些约定:

  1. 变量名称应以小写字母开头,以免与类名混淆。

  2. []应该使用类型名称而不是变量名称。

  3. 即使{}if的正文只有一行,也始终使用else

  4. 在操作符和关键字周围加上空格以便于阅读。

  5. 应用那些:

    String[] mapPath2;
    if (type.equals("comparative")) {
        mapPath2 = args[1].split(",");
    }
    else {
        mapPath2 = null;
    }
    

    许多人也将else放在与}相同的一行,所以:

    String[] mapPath2;
    if (type.equals("comparative")) {
        mapPath2 = args[1].split(",");
    } else {
        mapPath2 = null;
    }
    

    或者再次,更简洁:

    String[] mapPath2;
    mapPath2 = type.equals("comparative") ? args[1].split(",") : null;
    

答案 1 :(得分:1)

如果您不知道需要的尺寸,可以使用List代替Array

然后你可以使用

    List<String> list = new ArrayList<>();
    if(type.equals("comparative")){
       Collections.addAll(list, args[1].split(","));
    }