Java中的Scanner(详解常见用法)

Java中的Scanner(详解常见用法)OJ中遇到的问题和例子:doublenextDouble(),floatnextFloat(),intnextInt()等与nextLine()连用时都存在遗留的换行符影响nextLine()读取输入的问题,解决的办法是:在每一个next()、nextDouble()、nextFloat()、nextInt()等语句之后加一个nextLine()语句,将被next()去掉的…

大家好,又见面了,我是你们的朋友全栈君。

OJ中遇到的问题和例子:

double nextDouble() , float nextFloat() , int nextInt() 等与nextLine()连用时都存在遗留的换行符影响nextLine()读取输入的问题,解决的办法是:在每一个 next()、nextDouble() 、 nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉

import java.util.Scanner;    
public class Main {    
    public static void main(String[] args) {    
        Scanner in = new Scanner(System.in);    
        while (in.hasNext()) {    
            int n = in.nextInt();   
        /* nextLine()是扫描器执行当前行,并返回跳过的输入信息,特别需要注意!!! 

            如果没有该行,则执行第一个in.nextLine()命令时的返回值是int n = in.nextInt()的值*/   
            in.nextLine();  
        HashSet<String> set = new HashSet<String>();  
        for (int i = 0; i < n; i++) {   
        String line =   

        in.nextLine();   
        String[] arr = line.split(" ");   
        for (int j = 0; j < arr.length; j++) {   
            set.add(arr[j]);   
        }  
         }  
        System.out.println("sum:" + set.size());    

    }    
}  

一、扫描控制台输入



这个例子是常常会用到,但是如果没有Scanner,你写写就知道多难受了。


当通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用Scanner的nextLine()方法即可。




/** 
* 扫描控制台输入 
*/
 
public class TestScanner { 
        public static void main(String[] args) { 
                Scanner s = new Scanner(System.in); 
                System.out.println(“请输入字符串:”); 
                while (true) { 
                        String line = s.nextLine(); 
                        if (line.equals(“exit”)) break
                        System.out.println(“>>>” + line); 
                } 
        } 
}




请输入字符串: 
234 
>>>234 
wer 
>>>wer 
bye 
>>>bye 
exit 

Process finished with exit code 0





二、如果说Scanner使用简便,不如说Scanner的构造器支持多种方式,构建Scanner的对象很方便。




可以从字符串(Readable)、输入流、文件等等来直接构建Scanner对象,有了Scanner了,就可以逐段(根据正则分隔式)来扫描整个文本,并对扫描后的结果做想要的处理。




三、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”); 
//                s.useDelimiter(” |,|\\.”); 
                while (s.hasNext()) { 
                        System.out.println(s.next()); 
                } 
        }





123 
asdf 
sd 
45 
789 
sdf 
asdfl,sdf.sdfl,asdf 
……asdfkl 
las 

Process finished with exit code 0




将注释行去掉,使用空格或逗号或点号作为分隔符,输出结果如下:


123 
asdf 
sd 
45 
789 
sdf 
asdfl 
sdf 
sdfl 
asdf 

asdfkl 
las 
Process finished with exit code 0






四、一大堆API函数,实用的没几个




(很多API,注释很让人迷惑,几乎毫无用处,这个类就这样被糟蹋了,启了很不错的名字,实际上做的全是龌龊事)




下面这几个相对实用:




delimiter() 
          返回此 Scanner 当前正在用于匹配分隔符的 Pattern。
hasNext() 
          判断扫描器中当前扫描位置后是否还存在下一段。(原APIDoc的注释很扯淡)
hasNextLine() 
          如果在此扫描器的输入中存在另一行,则返回 true。
next() 
          查找并返回来自此扫描器的下一个完整标记。
nextLine() 
          此扫描器执行当前行,并返回跳过的输入信息。







五、逐行扫描文件,并逐行输出




看不到价值的扫描过程


        public static void main(String[] args) throws FileNotFoundException { 
                InputStream in = new FileInputStream(new File(“C:\\AutoSubmit.java”)); 
                Scanner s = new Scanner(in); 
                while(s.hasNextLine()){ 
                        System.out.println(s.nextLine()); 
                } 
        }




public class AutoSubmit { 
  /** 
    * @param args 
    * @throws Exception    
    */ 
  public static void main(String[] args) throws Exception { 

…在此省略N行 

Process finished with exit code 0





Java对字符串支持还是比较弱的,尽管Java一直在努力。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156998.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 18 games for android,Kids games for toddlers「建议收藏」

    18 games for android,Kids games for toddlers「建议收藏」Kidsgamesfortoddlers介绍Kidsgamesfortoddlers-Educationalgamefor2–4yearsoldtoddlersandkids-Sortandclassifyobjectsbyshape,size,colorandquantity-Developedinclosecooperation…

    2022年10月22日
  • 单臂路由实现VLAN间通信

    单臂路由实现VLAN间通信使用原因以太网中使用VLAN技术隔离二层广播域,其导致不同VLAN之间不能直接通信。在现实中,通常会有跨VLAN通信的情况,单臂路由技术就是解决VLAN间通信的一种方法。单臂路由原理单臂路由的原理是通过一台路由器,使VLAN间通过路由器的三层转发能够互通数据,在路由器的一个物理接口通过配置子接口(即逻辑接口)的方式来实现以一当多的功能、路由器同一物理接口的不同子接口作为不同VLAN的默认网关…

  • 如何解决Mac上网速度很慢的问题(多种可能分析)[通俗易懂]

    如何解决Mac上网速度很慢的问题(多种可能分析)[通俗易懂]问题:我发现在我的Mac上上网的速度很慢。第一种分析:问题分析:虽然Mac上的运行速度很慢,但同时在我的两台手机上面的运行速度都比较快。我刚开始怀疑是路由器的问题,如果是路由器的问题,那么手机肯定不会很块,手机也会很慢,可以断定肯定是我的mac设置出了问题,我按个这个步骤寻找,去掉8.8.8.8,问题解决了。将上面的DNS地址8.8.8.8去掉就好了分析8.8.8……

  • 作为大学生,如何通过学校认证免费获取正版matlab[通俗易懂]

    作为大学生,如何通过学校认证免费获取正版matlab[通俗易懂]时间有限,内容从简主要介绍大学生如何免费获取正版matlab,前提是贵学校已经为你提供了正版的matlab!!!否则,可以直接点右上角了。1.背景介绍作为前大学生,需要用matlab,又不想用盗版,也不想搞激活成功教程之类的,麻烦死了1.1直接上MathWorks官网matlab正版对于学生来说很贵。standard版的一年¥6,200,永久的¥15,500.education版的分…

    2022年10月11日
  • java applet介绍,Java Applet教程介绍[通俗易懂]

    java applet介绍,Java Applet教程介绍[通俗易懂]Applet是一种特殊类型的程序,嵌入在网页中以生成动态内容。它在浏览器中运行,并在客户端运行。小程序的优势小程序有很多优点。它们如下:它在客户端工作,因此响应时间更少。担保的它可以由在许多平台下运行的浏览器执行,包括Linux,Windows,MacOs等。小程序的缺点客户端浏览器需要插件才能执行applet。你知道吗小程序的层次结构如上图所示,Applet类扩展了Panel。…

  • ComponentName的用法

    ComponentName的用法在android应用中打开别的应用我当时第一眼看到的时候是懵逼的,这是个什么玩意开启界面不都是startActivity(intent)的吗?后来才反应过来不是要起自己界面中的Activity

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号