Java ArrayList-检查元素是否为空

Java ArrayList-检查元素是否为空,java,arrays,loops,arraylist,Java,Arrays,Loops,Arraylist,我只需要找到一种方法来验证输入,这样,如果第一个数组输入(hometeam)丢失,它就会显示消息“没有输入hometeam” 示例输入=“埃弗顿:利物浦:1:1” 缺少主队的例子:利物浦:1:1 正如你所看到的,我的尝试如下,我想不出如何解决这个问题: if (stats.get(i)[0] == null){ System.out.println("no home team name entered"); } 这是我的全部代码: public static v

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

示例输入=“埃弗顿:利物浦: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
                }
            }
publicstaticvoidmain(字符串参数[]){
扫描仪sc=新的扫描仪(System.in);
ArrayList stats=new ArrayList();//初始化容器以保存所有统计信息
System.out.println(“请输入匹配结果:”);
while(sc.hasNextLine())
{
字符串输入=sc.nextLine();
String[]results=input.split(“:”);
如果(results.length==4)
{
添加(结果);
}
else if(输入等于(“停止”))
打破
其他的
System.out.println(“错误读取输入”);
}//结束
对于(int i=0;i

}

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

因此,您需要将stats.get(i)[0]==null更改为
stats.get(i)[0].isEmpty()

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


如果要考虑输入数据可能没有空格的情况,则可以将拆分正则表达式字符串更改为
\\s*:\\s*
,然后在冒号两侧出现0或更多的空格时进行匹配。

非常简单。如果没有输入,则不会输入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
    }
}
if(stats.isEmpty()){
System.out.println(“未输入主队名称”);
}
否则{
试一试{
对于(int i=0;i
希望有帮助

我阅读了您的评论并理解您的问题:

您不会有任何包含多于或少于4个元素的字符串[]。您可以说results.length==4来确保这一点,否则不会向ArrayList添加任何内容。下一步是确保输入了有效的团队名称,并且最后两个元素是数字。从中复制函数 绿色答案或得票最多的答案。

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

isBlank检查字符串是否为null或完全为空白

此外,您需要检查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;
}
公共静态布尔值为空(最终字符序列cs){
国际斯特伦;
如果(cs==null | |(strLen=cs.length())==0){
返回true;
}
对于(int i=0;i
So。你的尝试有什么不应该做的?它应该做什么?它应该告诉用户他们没有在[0]中输入值,但它什么也没说,它跳过if语句
if(stats.get(i)[0]==null | | stats.get(i)[0].trim().isEmpty()){
?-要么添加一个
System.out
语句来测试该值,要么使用调试器进行简单的运行可能会有所帮助。可能的重复操作确实有很大帮助!尽管如果在第一个元素中放置空格(“:阿森纳:2:1”)…如果不放置空格,它只会给出“没有主队输入”消息(“:chelsea:2:1”)它只是返回“vs Arsenal:2-1”?这是因为它期望分割中有一个空格,如果没有空格,那么分割将不会在第一次发生
,只需删除空格要求或将您的正则表达式更改为
\\s*:\\s*
(0或更多空格)谢谢您的时间:)