A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田磊阳 金牌黑马   /  2013-3-5 21:35  /  3218 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 田磊阳 于 2013-3-7 13:03 编辑

Scanner sa = new Scanner(System.in);
String str = str.nextLine();

Scanner sa = new Scanner(System.in);
String str = str.next();
什么区别,结果是一样的啊

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
next()方法是不接收空格的,在接收到有效数据前,所有的空格或者tab键等输入被忽略,若有有效数据,则遇到这些键退出。

nextLine()可以接收空格或者tab键,其输入应该以enter键结束。

当next()和nextLine()连用时,nextLine()会自动接收next()函数的结束符,所以为了避免数据接收有误,要避免二个函数连用。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 邹学良 于 2013-3-5 22:17 编辑

next()接收空格键和tab键后退出,后面的数据将不再接收
nextLine()则是在收到回车键的结束指令后才结束接收,而不管之前输入的数据是否是空格键:如:
  1. class All
  2. {
  3. public static void main(String[] args) {
  4. Scanner sa = new Scanner(System.in);
  5. System.out.print("请输入 a s \n d");
  6. String str =sa.nextLine();
  7. System.out.print("str="+str);

  8. Scanner s = new Scanner(System.in);
  9. System.out.print("请输入 a s \n d");
  10. String st = s.next();
  11. System.out.print("st="st);


  12. }
  13. }
复制代码
str=as d
st=as

这样的话结果就不一样了
回复 使用道具 举报
in.nextLine();返回的是一个长度为0的空字符串:
可以在input = in.nextLine(); 后加
System.out.prinln("前"+input+"后,字符长度="+input.length());
你就能看到

next()要得到有效标记才能返回值,而nextLine()则不管这个,只要有当前行就能返回,当前行的剩余字符是0个照样返回。
修改方法有两种:
1、在每次in.nextDouble();后加一句in.nextLine();就不会出现这个问题了。
因为nextDouble没有义务处理换行,要用nextLine来处理换行,这样后面的input = in.nextLine(); 时没有新行,就会等待输入。

2、把while判断改为while(!input.equals("Y"));或者while (input.equals("N")&&(input.length()!=0));

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public String nextLine()此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。  因为此方法会继续在输入信息中查找行分隔符,所以如果没有行分隔符,它可能会缓冲所有输入信息,并查找要跳过的行。
public String next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息。
next方法不能得到带空格的字符串 如果你输入的是abc df你再看看结果是什么

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
李培根 来自手机 金牌黑马 2013-3-6 09:00:57
地板
突然发现自己没学过这个……
回复 使用道具 举报
李培根 发表于 2013-3-6 09:00
突然发现自己没学过这个……

赶紧补一下·······然后给我讲解一下,哈哈
回复 使用道具 举报
本帖最后由 杨杨 于 2013-3-6 10:47 编辑

纠正个错误
Scanner sa = new Scanner(System.in);
String str = str.nextLine();

Scanner sa = new Scanner(System.in);
String str = str.next();
Sting str=sa.nextLine();
String st=sa.next();
能加分不 他们的区别楼上兄弟们回答的很不错了
回复 使用道具 举报
杨杨 发表于 2013-3-6 10:40
纠正个错误
Scanner sa = new Scanner(System.in);
String str = str.nextLine();

对对,应该是

Sting str=sa.nextLine();
String st=sa.next();
回复 使用道具 举报
又学到了一点 以前没注意过这两个函数的不同之处。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马