【问题标题】:Java ArrayList - check if element is emptyJava ArrayList - 检查元素是否为空
【发布时间】:2017-06-28 00:01:26
【问题描述】:

我只需要找到一种方法来验证输入,这样如果第一个数组输入(主队)丢失,它会显示消息“没有主队进入”。

示例输入 =“埃弗顿 : 利物浦 : 1 : 1” 缺少主队示例“:利物浦:1:1”

如你所见,我的尝试如下,我想不出如何解决这个问题:

if (stats.get(i)[0] == null){
System.out.println("no home team name entered");
                }

这是我的完整代码:

public static void main(String args[]) {

         Scanner sc = new Scanner(System.in);
            ArrayList<String[]> stats = new ArrayList<>(); //initialize a container to hold all the stats
            System.out.println("please enter match results:");
            while(sc.hasNextLine())
            {
                String input = sc.nextLine();
                String[] results = input.split(" : ");
                if(results.length == 4)
                {
                    stats.add(results);
                }
                else if(input.equals("stop"))
                    break;
                else
                    System.out.println("Error reading input");
            }//end of while

            for(int i = 0; i < stats.size(); i++)
            {
                if (stats.get(i)[0] == null){
                    System.out.println("no home team name entered");
                }
                try{
                    System.out.println(stats.get(i)[0] + " " + Integer.valueOf(stats.get(i)[2]) + " : " +
                            Integer.valueOf(stats.get(i)[3]) + " " + stats.get(i)[1]);
                }catch (Exception e) {
                    //do nothing with any invalid input
                }
            }

}

【问题讨论】:

  • 所以。您的尝试做了哪些不应该做的事情?它不应该做什么?
  • 它应该告诉用户他们没有在[0]中输入值,但它只是什么也没说,它跳过了if语句
  • if (stats.get(i)[0] == null || stats.get(i)[0].trim().isEmpty()){? - 添加System.out 语句来测试值或使用调试器进行简单的运行可能会有所帮助

标签: java arrays loops arraylist


【解决方案1】:

拆分数组将第一个元素创建为空字符串 - 不是空字符串。

所以你需要把stats.get(i)[0] == null改成stats.get(i)[0].isEmpty()

您也可以添加trim(),以便首先删除任何多余的空格,或者将拆分正则表达式更改为\\s+:\\s+,然后匹配1个或更多个空格冒号。

如果您想考虑输入数据可能没有空格的情况,那么您可以将拆分的正则表达式字符串更改为 \\s*:\\s*,然后匹配 0 或更多 个空格冒号的一侧。

【讨论】:

  • 这确实有很大帮助!虽然如果你在第一个元素中放置一个空格(“:Arsenal:2:1”),它只会给出“没有主队进入”消息......如果你没有放置空格(“:切尔西:2:1 ") 它只是以 " vs 阿森纳 : 2 - 1" 回归?
  • 那是因为它期望在拆分中有一个空格,如果没有空格,那么第一个:不会发生拆分,只需删除空间要求或将您的正则表达式更改为@987654327 @(0 个或多个空格)
  • 感谢您的宝贵时间!:)
【解决方案2】:

尝试使用 StringUtils package。你可以使用StringUtils.isBlank(stats.get(i)[0])

StringUtils.isBlank 检查字符串是否为空或完全空白。

此外,您需要检查 stats 是否为空以显示整个输入为空白的消息

如果您想知道,这里是 isBlank 的代码:

public static boolean isBlank(final CharSequence cs) {
    int strLen;
    if (cs == null || (strLen = cs.length()) == 0) {
        return true;
    }
    for (int i = 0; i < strLen; i++) {
        if (Character.isWhitespace(cs.charAt(i)) == false) {
            return false;
        }
    }
    return true;
}

【讨论】:

    【解决方案3】:

    很简单。如果没有输入,则不会输入您的 for 循环,因此不会进行检查。

    阅读内容后替换你的for循环:

    if (stats.isEmpty()){
       System.out.println("no home team name entered");
    }
    else {
        try{
            for(int i = 0; i < stats.size(); i++){
                System.out.println(stats.get(i)[0] + " " + Integer.valueOf(stats.get(i)[2]) + " : " +
                            Integer.valueOf(stats.get(i)[3]) + " " + stats.get(i)[1]);
            }
        }
        catch (Exception e) {
              //do nothing with any invalid input
        }
    }
    

    希望对您有所帮助。

    我阅读了 cmets 并理解你的问题:

    您不会有任何包含多于或少于 4 个元素的 String[]。您可以通过说 results.length == 4 来确保这一点,否则不会将任何内容添加到 ArrayList 中。下一步是确保输入了有效的团队名称,并且最后两个元素是数字。复制函数 How to check if a String is numeric in Java 要么是绿色答案,要么是投票最多的答案。

    【讨论】:

      猜你喜欢
      • 2012-12-18
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2011-11-03
      • 2012-08-28
      相关资源
      最近更新 更多