java.util.Scanner应用详解
来源: 阅读:1398 次 日期:2014-12-02 15:05:38
温馨提示: 小编为您整理了“java.util.Scanner应用详解”,方便广大网友查阅!

java.util.Scanner获取输入的整数,长整型,字符串等:

代码如下:

/package com.color.program.ball;

import java.util.Scanner;

public class ScannerTest {

public static void main(String[] args) {

Scanner s = new Scanner(System.in);

//receive string

String str = s.next();

//receive integer

Integer i = s.nextInt();

//receive double

Double d = s.nextDouble();

System.out.println(str+i+d);

}

}

如用三元运算符判断一个数是奇数还是偶数:

import java.util.Scanner;

public class Ou {

public static void main(String[] args) {

System.out.println("请输入一个整数:");

Scanner reader = new Scanner(System.in);

long a = reader.nextLong();

String str = (a%2 )==0 ? "偶数":"奇数";

System.out.println("结果是:"+str);

}

}

一、扫描控制台输入

这个例子是常常会用到,但是如果没有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

exitProcess finished with exit code 0

先写这里吧,有空再继续完善。

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

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

代码如下:

package test;

import java.io.File;

import java.io.FileNotFoundException;

import java.util.Scanner;

import java.util.regex.MatchResult;

public class TestScanner {

public static void main(String[] args) throws FileNotFoundException {

// 键盘输入

Scanner sc = new Scanner(System.in);

System.out.println(sc.nextInt());

System.out.println("---------------");

// 文本扫描

Scanner sc2 = new Scanner(new File("D://1.txt"));

while (sc2.hasNextDouble()) {

System.out.println(sc2.nextDouble());

}

System.out.println("---------------");

// 正则解析

String input = "1 fish 2 fish red fish blue fish";

Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");

System.out.println(s.nextInt());

System.out.println(s.nextInt());

System.out.println(s.next());

System.out.println(s.next());

s.close();

System.out.println("---------------");

// 正则-匹配组

String input2 = "1 fish 2 fish red fish blue fish";

Scanner s2 = new Scanner(input2);

s2.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");

MatchResult result = s2.match();

for (int i = 1; i <= result.groupCount(); i++)

System.out.println(result.group(i));

s.close();

}

}

以下代码使 long 类型可以通过 myNumbers 文件中的项分配:

代码如下:

Scanner sc = new Scanner(new File("myNumbers"));

while (sc.hasNextLong()) {

long aLong = sc.nextLong();

}

三、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

lasProcess finished with exit code 0

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

123

asdf

sd

45

789

sdf

asdfl

sdf

sdfl

asdfasdfkllas

Process finished with exit code 0

再来个例子,根据pattern字符串来匹配

代码如下:

package test;

import java.util.Scanner;

import java.util.regex.MatchResult;

public class TestScanner2 {

public static void main(String[] args) {

String data = "\n" +

"\n" +

"\n" +

"\n" +

"[Next log section with different format]";

Scanner s = new Scanner(data);

String pattern = "(\\d+[.]\\d+[.]\\d+[.]\\d+)@(\\d{1,2}/\\d{1,2}/\\d{4})";

while(s.hasNext(pattern)) {

s.next(pattern);

MatchResult mr = s.match();

System.out.format("ip = %-15s, data= %10s\n", mr.group(1), mr.group(2));

}

}

}

useDelimiter(Pattern pattern)这个方法是Scanner中用于设置分隔符的,默认情况下scanner分割符是空格,你这 个程序中就是用正则表达式来设置分隔符,"\\s*fish\\s*"前面的一个\\s*表示空格出现0次或多次接着出现fish接着出现0个或多个空 格,只要scanner扫描遇到的数据符合这个正则表达式,前面的就当一个数据就可以用Scanner中的next()返回取得数据。

代码如下:

//output

ip = 127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , data= 21/10/2005

ip = 128.0.0.11&nbsp;&nbsp;&nbsp;&nbsp; , data=&nbsp; 3/11/2006

ip = 129.132.111.111, data=&nbsp;&nbsp; 4/2/2007

ip = 130.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , data=&nbsp; 15/1/2008

总结:1)多种输入,File,input,System.in,String等

2)与正则结合使用

3)实现了Iterator接口

四、一大堆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;

/**

* @author wangpeng

*

*/

public class AutoSubmit {

/**

* @param args

* @throws Exception

*/

public static void main(String[] args) throws Exception {

...在此省略N行

Process finished with exit code 0

更多信息请查看IT技术专栏

更多信息请查看网络编程
手机网站地址:java.util.Scanner应用详解
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map