Java ArrayList-检查元素是否为空
我只需要找到一种方法来验证输入,这样,如果第一个数组输入(hometeam)丢失,它就会显示消息“没有输入hometeam” 示例输入=“埃弗顿:利物浦:1:1” 缺少主队的例子:利物浦:1:1 正如你所看到的,我的尝试如下,我想不出如何解决这个问题: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
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或更多空格)谢谢您的时间:)