》概述

  在实现字符窗口的输入时,我个人更喜欢选择使用扫描器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. ACM 汉诺塔(三)

    汉诺塔(三) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度 ...

  2. wamp环境下安装memcached最好的详解教程^.^:(只需要3个步骤 )

    win8.1 wampserver2.5 -Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b 可以参考一下部分讲解有图,我就是看4-5个讲解,结合有一篇的截图最终才搞定的 ...

  3. Timestame类型和String 类型的转化

    Timestame类型和String 类型的转化 String转化为Timestamp: SimpleDateFormat df = new SimpleDateFormat("yyyy-M ...

  4. 基于SVG的JS地图插件

    一:D3(Data-Driven Documents) 官网地址:http://d3js.org/ 功能非常强大(不支持IE8) D3 是最流行的可视化库之一,它被很多其他的表格插件所使用.它允许绑定 ...

  5. 配置hooks使svn提交后自动同步客户端代码(客户端与服务端在同一台机器上)

    1.配置svn的hooks 2.实例演示 1.配置svn的hooks 1.1)配置情况 承接上篇svn搭建的文章,今次继续使用上篇文章的配置 上篇文章的地址:linux下搭建svn代码库 svn仓库所 ...

  6. 在XP下安装PHP

    最近,有许多朋友问我在WindowsXp下PHP的安装过程,正好最近我在自己的机器上成功的以模块化的方式安装了PHP4.23.既然这么多朋友需要,我就以最常见的IIS和Apache服务器为例,把PHP ...

  7. javascrit2.0完全参考手册(第二版) 第1章第2节:javascript的历史和使用

    javascript曾经带给人许多误解,例如如果你不了解它的历史,那么你可能困惑它和java有什么关系,其实它们一点关系都没有.网景公司1995年在Navigator 2.0 中引入这门语言时它叫Li ...

  8. 多态(Java)

    一.多态 1.什么是多态? 解析:不同的对象对于同一个操作,做出的响应不同 具有表现多种形态的能力的特征 2.使用多态的优点 解析:为了实现统一调用 一个小例子:<父类类型作为参数> 父类 ...

  9. php读取html文件(或php文件)的方法

    一.使用fopen()函数   此函数主要传入的是头两个参数(第一个是文件地址,第二个是打开方式),可以读取任何一个文本文件,然后用while将fopen函数读取到的每一行数据循环输出.   如:   ...

  10. zk 隐藏网页文件后缀

    前台(test.zul): <a label="隐藏地址" href="/Bandbox/test.html"/> web.xml添加 <se ...