学习一门编程语言,在开始时最好的方式之一是利用文本编辑器进行代码的编写,这有助于短期内迅速掌握该门语言的基本语法结构。本文意在介绍通过文本编辑时,如何实现与程序的交互的入门知识总结。
一、使用Scanner类进行输入交互(1.5及其以上版本)
位于包java.util中,该类是一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
public final class Scanner extends Object implements Iterator< String> Scanner使用分隔符模式将输入分解为标记,默认情况下该分隔符模式与空白匹配,包括空格键、Tap键和回车键,即默认情况下以空白作为标记结束位置,然后可以使用不同的next方法将得到的标记转换为不同类型的值。扫描器还可以使用不同于空白的分隔符。下面是从一个字符串读取若干项的例子:
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();输出为:
1 2 red blue以下代码使用正则表达式同时解析所有的 4 个标记,并可以产生与上例相同的输出结果:
当输入不匹配时,则会抛出java.util.InputDisMatchException异常。 注意其API中相关的方法的含义。String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input); s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)"); MatchResult result = s.match(); for (int i=1; i<=result.groupCount(); i++) System.out.println(result.group(i)); s.close();
二、使用BufferedReader取得输入 Scanner取得输入的依据是空格符,有时在需要输入一个含空格的字符串时就不适用,此时就不能输出完成的字符串,要想取得包含空格串的输入,比较简单的方法是适用java.io.BufferedReader类取得输入。在未有Scanner类之前,这个方法是用来取得用户输入的方式。
public class BufferedReader extends Reader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
BufferedReader in = new BufferedReader(new FileReader("foo.in"));将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。
构造方法摘要BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
创建一个使用指定大小输入缓冲区的缓冲字符输入流。
这里要特别提出的方法是readLine()方法,使用BufferedReader对象的readLine()方法必须处理java.io.IOException异常。
public String readLine() throws IOException
- 读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
-
-
返回:
- 包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null 抛出:
-
IOException
- 如果发生 I/O 错误
标准输入输出串这里就不在介绍,平时我们用的System.out/in就是。