java.util.Scanner应用详解
 
java.util.Scanner是Java5的新特征,主要功能是简化文本扫描。这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java API文档中列举了大量的API方法,但是都不怎么地。
 
一、扫描控制台输入
 
这个例子是常常会用到,但是如果没有Scanner,你写写就知道多难受了。
当通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用Scanner的nextLine()方法即可。
 
/** 
* 扫描控制台输入 

* @author leizhimin 2009-7-24 11:24:47 
*/ 
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()); 
                } 
        }
 
package own;

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.ProtocolException; 
import java.net.URL;

import com.verisign.uuid.UUID;

/** 
* ��һ������թƭ��վ�Զ��ύ������Ϣ�ij����ÿտ�������һ�¡� 
* @author wangpeng 

*/ 
public class AutoSubmit {

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

...在此省略N行

Process finished with exit code 0

 
Java对字符串支持还是比较弱的,尽管Java一直在努力。
 
Java的确老势已经下来了,越来越庞大臃肿,往昔的辉煌正成为Java前进路上的绊脚石,为了向后兼容,为了平稳的过度,不得不做很多痛苦的选择。
如果Java能直接出Java III,完全抛弃现有的糟粕,全新设计语法和风格。Java也许会继续辉煌下去。
自己写了个控制台输入数组并获取数组的例子:
import java.util.Arrays;
import java.util.Scanner; public class Scanner02 {
public static void main(String[] args){
Scanner inScanner = new Scanner(System.in);
String string = inScanner.nextLine();
String[] sChar = string.split(",");
//String[] sChar = string.split(" "); //以空格作为分隔符
int[] nums = new int[sChar.length];
for(int i= 0;i<nums.length;i++){
nums[i] = Integer.parseInt(sChar[i]); //string型转换为int型
}
String nString = inScanner.nextLine(); //实现数据多行输入
System.out.println(Arrays.toString(nums)); //输出数组 System.out.println("n:"+Integer.parseInt(nString));
inScanner.close(); } }

运行结果:

1,2,3,4,5
5
[1, 2, 3, 4, 5]
n:5
import java.util.Arrays;
import java.util.Scanner; public class Scanner03 { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner inScanner = new Scanner(System.in);
int[] nums = new int[5];
/*while(inScanner.hasNext()){
System.out.println(inScanner.nextInt());
}*/
for(int i=0;i<5;i++){ //利用循环来存储数组元素
nums[i] = inScanner.nextInt();
} System.out.println(Arrays.toString(nums));
inScanner.close(); } }

打印结果:

1 2 3 4 5
[1, 2, 3, 4, 5]

(转)java.util.Scanner应用详解的更多相关文章

  1. java.util.Scanner应用详解++扫描控制台输入

    java.util.Scanner应用详解   java.util.Scanner是Java5的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java ...

  2. 国际化,java.util.ResourceBundle使用详解

    java.util.ResourceBundle使用详解   一.认识国际化资源文件   这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序可以:          轻松地本地化或翻译成不同的 ...

  3. java.util.ResourceBundle使用详解

    java.util.ResourceBundle使用详解   一.认识国际化资源文件   这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序可以:          轻松地本地化或翻译成不同的 ...

  4. java.util.ResourceBundle使用详解(转)

    java.util.ResourceBundle使用详解   一.认识国际化资源文件   这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序可以:          轻松地本地化或翻译成不同的 ...

  5. 【转】java.util.ResourceBundle使用详解

    原文链接:http://lavasoft.blog.51cto.com/62575/184605/ 人家写的太好了,条理清晰,表达准确.   一.认识国际化资源文件   这个类提供软件国际化的捷径.通 ...

  6. java.util.Arrays类详解(源码总结)

    概述 Arrays类位于java.util包下,是一个对数组操作的工具类.今天详细的看了看Arrays类的4千多行源码,现将Arrays类中的方法做一个总结(JDK版本:1.6.0_34).Array ...

  7. java.util.concurrent BlockingQueue详解

    什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用.阻塞 ...

  8. java.util.ConcurrentModificationException解决详解

    异常产生 当我们迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素),可能会抛出java.util.ConcurrentModificationExceptio ...

  9. Java Scanner用法详解

    一.Scanner类简介 Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序.它是以前的StringTokenizer和Matcher类之间的某种结合.由于 ...

随机推荐

  1. asp.net core 教程(四)-项目结构

    Asp.Net Core-项目结构 Asp.Net Core-项目结构 案例 在这一章,我们将讨论 ASP.NET Core项目在文件系统上的组成方式以及不同的文件和目录都是如何协同工作的. 让我们打 ...

  2. grunt中常见的插件

    /** * 需要用到的文件夹有 js(src) css image html */ gulp是一种自动化构建工具,可以增强我们的工作流程,他是基于 Node.js 构建的,与gruntjs相比,gul ...

  3. Windows 7安装Oracle 10g的方法

    Windows7下安装Oracle 10g提示"程序异常终止,发生未知错误"的解决方法 1.修改Oracle 10G\database\stage\prereq\db\refhos ...

  4. Linux回炉复习系列文章大纲

    本人最近在回炉Linux的内容,也做了很多整理,顺便也想将整理的内容分享出来. 由于该系列文章的内容主要是复习整理而来,其中绝大多数命令都是翻译和整理man或info文档总结的,另外很多地方也没有给出 ...

  5. Linux下一些命令

    #修改键盘布局 setxkbmap -layout us #给用户添加工作组 usermod -G groupname username #解压Tar包至指定目录 tar -xvf example.t ...

  6. c++,函数名不要和某个类名相同 (syntax error : missing ';' before identifier....)

    直接上代码: // outside.h class Outside { private: class Inner { public: Inner(Outside& out) : out_(ou ...

  7. SQL Server 2012 酸爽的安装体验

    电脑上已经安装了SQL Server 2008 R2,要想安装SQL Server 2012,必须先将已安装的SQL Server 2008 R2 安全卸载,否则安装过程中会报错! 使用到的卸载软件有 ...

  8. 【LeetCode】98. Validate Binary Search Tree

    题目: Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is define ...

  9. 获取元素到body/html的距离函数

    获取元素到body的距离: <script> function offsetDis(obj) { var l = 0, t = 0; while(obj) { l = l + obj.of ...

  10. http(一)web和网络基础

    深入学习http不为别的,只为补充底层知识,打好根基,深入了解其他技术,擒贼先擒王,学好九阳神功以后,乾坤大挪移,太极剑就容易了,急于求成,就只能变周芷若.走着...... 来源于:图解HTTP 1. ...