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一直在努力。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux下如何保存退出vim编辑器

    linux下如何保存退出vim编辑器命令:vimapp.py如果不存在app.py则会自动创建1.进入编辑器后按字母“i”即可进入编辑状态(此时左下角会出现 “插入”)2.退出的时候分为4种情况:保存退出、正常退出、不保存退出以及强制退出 2.1:保存退出:按“Esc”键后此时的“插入”会消失,然后按Shift+zz就可以保存修改内容并退出 2.2:不保存退出:当修改修改了一部分内容后发现修改错了,此时就会进行不保存退…

    2022年6月3日
    241
  • kafuka安装启动

    kafuka安装启动https://www.jianshu.com/p/ce203d4e2f41

    2022年5月3日
    52
  • WinHttp用法(WinHttp.WinHttpRequest.5.1方法,属性)

    WinHttp用法(WinHttp.WinHttpRequest.5.1方法,属性)使用WinHttpRequest伪造HTTP头信息,伪造Referer等信息由于微软封锁了XmlHttp对象,所以无法伪造部分HTTP头信息,但是WinHttp.WinHttpRequest.5.1对象,它居然用可以成功伪造所有http请求的header信息!从msdn得知,WinHttp.WinHttpRequest.5.1是msxml4.0的底层对象,也就是说XML

    2022年7月11日
    22
  • python 判断文件是否存在,删除文件

    python 判断文件是否存在,删除文件#判断文件是否存在,path为文件路径importosos.path.exists(path)#删除文件,path为文件路径importosos.remove(path)

    2022年6月18日
    43
  • java套打快递单

    java套打快递单packageorg sq common utils importorg apache commons codec binary Base64 importorg apache http entity StringEntity importorg dom4j Document importorg dom4j DocumentExce importorg dom4j

    2025年7月4日
    3
  • ROBOTSTXT_OBEY[通俗易懂]

    ROBOTSTXT_OBEY[通俗易懂]爬虫协议,即robots协议,也叫机器人协议它用来限定爬虫程序可以爬取的内容范围通常写在robots.txt文件中该文件保存在网站的服务器上爬虫程序访问网站时首先查看此文件在scrapy项目的settings.py文件中默认ROBOTSTXT_OBEY=True,即遵守此协议当爬取内容不符合该协议且仍要爬取时设置ROBOTSTXT_OBEY=False,不遵守此协议…

    2022年4月27日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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