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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • lamp配置多个虚拟站点

    lamp配置多个虚拟站点在同一ip下添加多个域名站点!1.查看ip命令:ifconfig2.添加域名命令:vi/etc/hosts输入域名:如192.168.160.127www.test.com192.168.160.127www.test2.com3.创建要配置站点的文件夹及文件.var/www/test/index.php/var/www/test2/inde…

    2022年6月5日
    24
  • Linux用netstat查看服务及监听端口详解

    Linux用netstat查看服务及监听端口详解在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询netstat命令各个参数说明如下:-a或–all显示所有连线中的Socket。-A<网络类型>或–…

    2022年7月23日
    7
  • 《学习笔记10》——JavaScript三目运算符的使用[通俗易懂]

    《学习笔记10》——JavaScript三目运算符的使用[通俗易懂]三目运算符是多种语言中,都有的一种语法,这里着重讲解JavaScript里的用法。1.判断基本语法:expression?sentence1:sentence2当expression的值为true时,执行sentence1,否则执行sentence2,请看如下代码:3>0?2:1等价于:if(3>0){return2}else{return1}意思是,当3>0成立时,返回2,否则返回1

    2022年6月22日
    31
  • sqlite数据库可视化工具—— DB.Browser安装说明

    sqlite数据库可视化工具—— DB.Browser安装说明下面这一步是让你选择是否安装快捷方式到桌面和开始菜单:选择安装的位置,可以默认,或者选择自己的目录:等待安装完成即可打开软件:…

    2022年9月8日
    0
  • UpdatePanel用法详解

    UpdatePanel用法详解本文转自:http://www.cnblogs.com/shangxia/articles/2281782.html今天用做日历显示本月的考勤记录,用到了UpdatePanel控件,才发现对这个控件并不太了解,所以找了点儿资料,整理了一下给大家发上来!一、UpdatePanel的结构”ScriptManager1″runat=”server”>”Update

    2022年7月23日
    8
  • python趣味编程100例pdf(python简单实例)

    1#题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?代码:23h=04li=[]5foriinrange(1,11):6s=100/(2**(i-1))7li.append(s)89forxinli:10h+=x11print(li)12print(…

    2022年4月17日
    220

发表回复

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

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