java中Scanner类nextLine()、next()、hasNext()等总结

一、java.util.Scanner是Java5的新特征,主要功能是简化文本扫描。

使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件、输入流 、字符串中解析出基本类型值和字符串值。Scanner类提供了多个构造器,不同的构造器可接受文件、输入流、字符串作为数据,用于从文件、输入流、字符串中解析数据。

二、Scanner主要提供了两个方法来扫描输入:

(1) hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果需要判断是否包含下一个字符串,可以省略Xxx.
(2) nextXxx():获取下一个输入项。Xxx的含义与前一个方法中Xxx相同。

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
Scanner sc = new Scanner(new File("myNumbers"));
      while (sc.hasNextLong()) {
          long aLong = sc.nextLong();
      }
三、事实上,Scanner提供了两个简单的方法来逐行读取:

(1) boolean hasNextLine():返回输入源中是否还有下一行。
(2)String nextLine():返回输入源中的下一行的字符串。

四、关于分割符

在默认情况下,Scanner使用空白(包括空格、Tab空白、回车)作为多个输入项之间的分隔符。

Scanner默认使用空格作为分割符来分隔文本,但允许你指定新的分隔符

public static void main(String[] args) throws FileNotFoundException { 
      Scanner s = new Scanner("123 asdf sd 45 789 sdf asdfl,sdf.sdfl,asdf    ......asdfkl    las"); 
      //Scanner使用useDelimiter(String pattern)方法设置分隔符。下面设置使用回车作为分隔符,
  //sc.useDelimiter("\n");
      while (s.hasNext()) { 
           System.out.println(s.next()); 
      } 
}
结果:
123 
asdf 
sd 
45 
789 
sdf 
asdfl,sdf.sdfl,asdf 
......asdfkl 
las 
五、next() 、nextLine()区别

1.next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。next方法不能得到带空格的字符串。
2. nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的
3. next()和nextLine(),这两个方法返回的都是String类型的

package sort;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){ 
        String str = null;
        String str2;
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){  
            str2 = in.next();
            System.out.println("next:");
            System.out.println(str2);
            str = in.nextLine();
            System.out.println("nextLine:");
            System.out.println(str);

            str = null;
        }
        in.close();
    }
}

结果:

asd kjls
next:
asd
nextLine:
 kjls
关于结束hasNext():

想要结束循环,在Windows环境下,需要输入Ctrl+Z;而在Unix环境下,需要输入Ctrl+D。注意,这是输入,而不是对控制台进行操作。这相当于向控制台输入一个字符,这个字符代表EOF,此时hasNext()方法返回false,循环结束。

例子:

public static void main(String[] args){ 
    String str = null;
    Scanner in = new Scanner(System.in);
    System.out.println("请输入,按Enter键换行,按Ctrl+Z结束。");
    while(in.hasNext()){  
        str = in.nextLine();
        System.out.println(str);
        str = null;
    }
    in.close();
}
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值