用户将以下内容输入扫描仪:
" a" (字符' a'后跟单个空格)
我明白为什么会这样:
Scanner in = new Scanner(System.in);
System.out.println(in.nextLine().matches("a\\s"));
但我不明白为什么这不起作用:
Scanner in = new Scanner(System.in);
System.out.println(in.next().matches("a\\s"));
第一个代码块(顶部的一个)返回true
,而第二个(底部)返回false
两者之间的唯一区别是使用nextLine()
而另一个next()
任何人都可以解释这种行为吗?我知道最佳实践要求用户使用Pattern和Matcher类,但这真的很困扰我。
我也试过("a(\\s)")
,但不幸的是,这给了我同样的结果。我记得读过.matches()
方法在输入的开头添加^
,在结尾添加$
,但这仍然不能使它返回false并且我已经尝试过了它确实返回了假。
答案 0 :(得分:1)
使用方法public void onDataChange(DataSnapshot dataSnapshot) {
UserList = new ArrayList<User>();
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
System.out.println(userSnapshot.getKey());
UserList.add(userSnapshot.getValue(User.class));
}
}
时,它只扫描文件的一个字符。因此,next()
会返回in.next()
,a
,\
,然后\
。使用s
,您正在扫描整行,从而nextLine()
。希望这有帮助!