我只需要找到一种验证输入的方法,这样如果缺少第一个数组输入(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
}
}
}
答案 0 :(得分:1)
split数组将第一个元素创建为空字符串 - 而不是空字符串。
因此您需要将stats.get(i)[0] == null
更改为stats.get(i)[0].isEmpty()
您还可以添加trim()
,以便首先删除任何额外的空格,或将您的拆分正则表达式更改为\\s+:\\s+
,然后匹配 1或更多次出现结肠两侧的空间。
如果您想考虑输入数据可能没有空格的情况,那么您可以将拆分正则表达式字符串更改为\\s*:\\s*
,然后匹配 0或更多次出现空间两侧的空间。
答案 1 :(得分:0)
非常简单。如果没有输入,您的for-loop将不会被输入,因此不会进行检查。
用以下内容读取内容后替换你的for循环:
Select Id, Group_Concat(Col1) As Col1,
Group_Concat(Col2) As Col2,
Group_Concat(Col3) As Col3, ...
Group_Concat(Coln) As Coln
From table
Group By Id
希望有所帮助。
我阅读了评论并理解你的问题:
您不会拥有包含多于或少于4个元素的任何String []。您通过说results.length == 4来确保这一点,否则将不会向ArrayList添加任何内容。下一步是确保输入有效的团队名称,并确保最后2个元素是Numbers。复制功能 How to check if a String is numeric in Java绿色答案或最热门的答案。
答案 2 :(得分:0)
尝试使用StringUtils package。您可以使用StringUtils.isBlank(stats.get(i)[0])
StringUtils.isBlank检查字符串是否为空或完全是空格。
此外,您需要检查统计信息是否为空以显示整个输入为空白的消息
如果您想知道,以下是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;
}