nextInt()接收整数后再用nextLine()接收字符串,导致nextLine()方法无效

简介: nextInt()接收整数后再用nextLine()接收字符串,导致nextLine()方法无效

问题描述:

先用nextInt()接收整数,再用nextLine()接收字符串,导致nextLine()方法无效。

//测试代码
import java.util.Scanner;
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num = sc.nextInt();
        System.out.println("请输入一个字符串");
        String line = sc.nextLine();
        System.out.println("输出结果为");
        System.out.println(num);
        System.out.println(line);
    }
}

产生原因:

1.nextInt()和nextLine()方法的结束标记都是 回车换行符(\r\n)

2.nextInt()防止只能接受用户录入的整数,不接收 \r\n

3.\r\n遗留下来,被nextLine()方法识别,导致nextLine()方法直接结束。

解决方案:

 方式一:采用next()方法接收字符串 
        格式: String line = sc.next();
        缺点:next()方法的结束标记是空格,空格之后的数据都接收不到。所以如果录入数据中包含空格的请不要选择这种方式
  方式二:先调用nextLine()方法接收\r\n,再调用一次nextLine接收字符串数据;
         格式:String line = sc.nextLine(); //接收/r/n
                     line = sc.nextLine(); //接收字符串数据
          缺点:nextLine()方法会调用两次。
   方式三:创建一个新的Scanner对象。
          格式:Scanner sc2 = new Scanner(System.in);
                       String line = sc2.nextLine();
          缺点:多创建一次对象,占用系统内存。
     方式四:数字和字符串都用nextLine()接收,然后将字符串数字 转换成 int数字。
          格式:String str = sc.nextLine();//接收数字
                         int num = Integer.parseInt(str);//转换成int类型
                         String line = sc.nextLine();//接收字符串
           推荐使用方式四。

目录
相关文章
|
27天前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
30 0
远程服务器返回错误: (411) 所需的长度。
远程服务器返回错误: (411) 所需的长度。
98 0
键盘录入一段字符串 ,然后输出该字符串中字符出现的次数(TreeMap)
键盘录入一段字符串 ,然后输出该字符串中字符出现的次数(TreeMap)
66 0
输入一个字符串,把其中的字符按逆序输出。如输入LIGHT,输出THGIL。要求用string方法。
输入一个字符串,把其中的字符按逆序输出。如输入LIGHT,输出THGIL。要求用string方法。
next 与 nextLine 方法的区别
next 与 nextLine 方法的区别
319 0
next 与 nextLine 方法的区别
Scanner读取文件和输入数据(六)
Scanner读取文件和输入数据(六)
455 0
Scanner读取文件和输入数据(六)
NSString字符串相加连接的三种方法、判断是否包含字符串的方法
NSString字符串相加连接的三种方法、判断是否包含字符串的方法
665 0