》概述

  在实现字符窗口的输入时,我个人更喜欢选择使用扫描器Scanner,它操作起来比较简单。我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种nextLine(),但是这两种方法究竟有什么区别呢?

  》》1.首先,next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串;而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

》举例说明

  鉴于以上两种方法的只要区别,同学们一定要注意next()方法和nextLine()方法的连用,下面举个例子来说明:

 import java.util.Scanner;

 public class Test_next {
public static void main(String[] args) {
String s1,s2;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入第一个字符串:");
s1=scanner.next();
System.out.println("请输入第二个字符串:");
s2=scanner.nextLine();
System.out.println("输入的字符串是:"+s1+s2);
} }

测试代码

 请输入第一个字符串:
home
请输入第二个字符串:
输入的字符串是:home

运行结果

》结论

  nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2从键盘输入值。

  经过验证,其他的next的方法,如double nextDouble()  , float nextFloat() , int nextInt() 等与nextLine()连用时都存在这个问题。

》解决的办法

在每一个 next()、nextDouble()  、 www.gzlij.com()、nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉

 import java.util.Scanner;

 public class Test_next {
public static void main(String[] args) {
String s1,s2;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入第一个字符串:");
s1=scanner.next();
scanner.nextLine();
System.out.println("请输入第二个字符串:");
s2=scanner.nextLine();
System.out.println("输入的字符串是:"+s1+s2);
} }

测试代码

 请输入第一个字符串:
home
请输入第二个字符串:
work
输入的字符串是:homework

运行结果

》 应用举例

 package atest.dak.com;

 import java.util.Arrays;
import java.util.Scanner; /*
* 随机生成指定位数的验证码
* 提醒用户输入
* 判断用户输入是否正确
*/
public class Test{
public static void main(String[] args){
Scanner scan = new Scanner(System.in); System.out.print("请输入随机产生的验证码的个数:");
int number = scan.nextInt(); char[] arr_of_random = randome_num(number); //获取随机验证码
System.out.println(Arrays.toString(arr_of_random)); //打印随机验证码 System.out.print("请输入验证码:"); /*
* 注意:由于之前进行输入的时候是用回车作为结束的,所以如果用nextline()的话就会
* 将上一次的结束的回车作为这次的输入,又因为nextline()的结束也是回车,所以
* 在这里通过nextline()作为输入函数是不会得到任何输入值的;因此我们用next()
* 作为这里的输入函数可以有效的避免这种问题。
*/
String answer = scan.next(); //获取输入字符串
char[] arr_of_answer = answer.toCharArray(); //将输入字符串转化成字符数组
System.out.println(Arrays.toString(arr_of_answer)); //打印输入字符数组 int[] result = match(arr_of_answer, arr_of_random);
System.out.println(Arrays.toString(result)); } // 产生所有小写字母
private static void f1(){
for(int i = 97; i < 97 + 26; i++){
System.out.print("\'"+(char)i+"\'"+",");
}
} // 产生所有大写字母
private static void f2(){
for(int i = 65; i < 65 + 26; i++){
System.out.print("\'"+(char)i+"\'"+",");
}
} // 随机产生指定个数的验证码
private static char[] randome_num(int figure){
char[] cha01 = {'a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q','r','s',
't','u','v','w','x','y','z','A','B','C','D',
'E','F','G','H','I','J','K','L','M','N','O',
'P','Q','R','S','T','U','V','W','X','Y','Z'};
boolean[] used = new boolean[cha01.length];
char[] cha02 = new char[figure];
for(int i = 0; i < cha02.length; i++){
int j; //进行去重复处理
do{
j = (int)(Math.random()*(cha01.length));
}while(used[j]); cha02[i] = cha01[j];
used[j] = true;
}
return cha02;
} // 对随机验证码和输入的验证码进行匹配
private static int[] match(char[] answer, char[] random){
int[] result = new int[2];
for(int i = 0; i < answer.length; i++){
for(int j = 0; j < random.length; j++){
if(random[j] == answer[i]){
result[0]++;
if(j == i){
result[1]++;
}
}
}
}
return result;
}
}

随机验证码的匹配

java中nextLine()和next()的区别的更多相关文章

  1. java中nextLine()与next()的区别

    java中的next()和nextLine()还是有很大区别的. next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自 ...

  2. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  3. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  4. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

  5. Java中this与super的区别【6】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  6. Java中堆和栈的区别(转)

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.      Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...

  7. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  8. Java中Long与long的区别(转)

    Java中Long与long的区别(转) [本文转载自:http://www.cnblogs.com/bluestorm/archive/2012/04/22/2464739.html] 转载请联系原 ...

  9. java中堆和堆栈的区别

    java中堆和堆栈的区别(一) 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取 ...

随机推荐

  1. <fieldset>

    legend{text-align:center;} <fieldset> <legend>爱好<legend>(为fieldset定义标题) <input ...

  2. mysql数据向Redis快速导入

    Redis协议 *<args><cr><lf> 参数个数 $<len><cr><lf> 第一个参数长度 <arg0> ...

  3. Codeforces Round #250 (Div. 2) A. The Child and Homework

    注意题目长度不能考虑前缀,而且如果即存在一个选项的长度的两倍小于其他所有选项的长度,也存在一个选项的长度大于其他选项长度的两倍,则答案不是一个好的选择,只能选择C. #include <iost ...

  4. 【HDU】4035 Maze

    http://acm.hdu.edu.cn/showproblem.php?pid=4035 题意:给一棵n个节点的树,每个节点有值k[i]和e[i],分别表示k[i]概率走向1号节点,e[i]概率获 ...

  5. 【BZOJ1654】[Usaco2006 Jan]The Cow Prom 奶牛舞会 赤果果的tarjan

    Description The N (2 <= N <= 10,000) cows are so excited: it's prom night! They are dressed in ...

  6. 【Oracle】同义词问题

    优点: 1.节省数据库空间,多用户可以操作同一张表: 2.扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互: 3.利用Database Link.创建同义词可以实现不同数据库服务器之间的 ...

  7. 去掉inline-block元素默认间距的几种方法

    方法1:使用负margin值一般是-3px,部分浏览器可能不同,不太推荐使用. 方法2:去掉多余空格将元素紧挨着写去掉多余空格,但降低了可读性. 方法3:使用font-size:0在外层父元素加上fo ...

  8. Infragistics公司的UltraWebGrid控件在显示的时候报“theForm” 未定义错误的解决。

    在项目中使用了Infragistics公司的UltraWebGrid控件,浏览器中报错,“theForm” 未定义,并且造成客户端js,滚动条,失效.最后查官网论坛找到问题.需要把web.config ...

  9. highcharts 时间少8小时问题

    Highcharts 中默认开启了UTC(世界标准时间),由于中国所在时区为+8,所以经过 Highcharts 的处理后会减去8个小时. 如果不想使用 UTC,有2种方法可供使用: 1.在使用Hig ...

  10. NHibernate 基本配置 (第一篇)

    使用NHibernate最重要的一步就是配置,如果连NHibernate都还没有跑的起来,谈何学习.今天就来详解一下NHibernate的配置. 一.NHibernate基本配置 NHibernate ...