》概述

  在实现字符窗口的输入时,我个人更喜欢选择使用扫描器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. Python for Informatics 第11章 正则表达式三(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.2 用正则表达式抽取数据 ...

  2. ACM 6174问题

    6174问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替 ...

  3. Vijos1425子串清除 题解

    Vijos1425子串清除 题解   描述: 我们定义字符串A是字符串B的子串当且仅当我们能在B串中找到A串.现在给你一个字符串A,和另外一个字符串B,要你每次从B串中从左至右找第一个A串,并从B串中 ...

  4. iphone H5 input type="search" 不显示搜索 解决办法

    H5 input type="search" 不显示搜索 解决办法 H5 input type="search" 不显示搜索 解决方法 在IOS(ipad iP ...

  5. Flex在Win10,Chrome浏览器上汉字乱码的问题

    今天遇到一个超级郁闷的问题,之前好好的程序.但是因为客户升级了客户端操作系统.由Win7升级到Win10,就出现乱码了. 找了好多原因和办法都没解决. (1)IE浏览器正常 (2)Win7,Windo ...

  6. 【Go语言】连接数据库SQLite、MySQL、Oracle

    本文目录 1.Go连接SQLite 1_1.SQLite推荐驱动 1_2.SQLite连接示例代码 2.Go连接MySQL 2_1.MySQL推荐驱动 2_2.MySQL连接示例代码 3.Go连接Or ...

  7. Objective-C的新特性

    Objective-C的新特性 苹果在今年的 WWDC2012 大会上介绍了大量 Objective-C 的新特性,能够帮助 iOS 程序员更加高效地编写代码.在不久前更新的 Xcode4.4 版本中 ...

  8. Trie字典树 静态内存

    静态字典树 看了好久的字典树,挺简单的一个结构,愣是看了这么久才写出来... 专心一点就不会这样了.... 接下来就去刷刷字典树的题吧....... 下面是字典树.... 定义节点 typedef s ...

  9. CWnd与HWND的简单辨析

    今天在写一个小的网络应用,需要用到HWND类型的一个参数.而程序中有的“窗口操作句柄”只有一个CWnd类型的指针.这俩不都是“窗口句柄”么?而且反正都是地址直接转换使用如何?结果出现了调用失效的情况. ...

  10. error CS0016: 未能写入输出文件

    win7 下解决办法: 1.打开C:\Windows ,找到 TEMP 文件夹 2. 进行权限设置,点击编辑,找到 IIS-User,勾选所有权限