基础知识
BufferedReader
概述
BufferedReader是Java I/O中的一个类,它是一个带缓冲区的字符输入流,用于从字符输入流中读取字符。它提供了一种逐行读取文本文件的方法,可以轻松地读取大量文本数据,并且可以通过使用缓冲区来提高读取效率。它的主要作用是读取文本文件中的字符数据,可以读取文件中的每一行数据,是Java I/O中常用的数据读取类之一。BufferedReader类只能读取字符类型的数据,如果需要读取其他类型的数据需要进行类型转换。
构造方法
-
public BufferedReader(Reader in)
创建一个缓冲字符输入流对象,并选择指定字符输入流对象in作为其实际数据源。
-
public BufferedReader(Reader in, int size)
创建一个缓冲字符输入流对象,并选择指定字符输入流对象in作为其实际数据源,同时指定缓冲区大小size。
成员方法
-
public String readLine() throws IOException
从缓冲区中读取一行结果, 并返回一个String类型的结果
-
public int read() throws IOException
从缓冲区读取一个字符, 并返回读取的字符的ASCII码值, 如果到达流的末尾就返回-1.
-
public void close() throws IOException
关闭字符流
InputStreamReader
概述
是java从字节流到字符流的一个桥梁
StreamTokenizer
概述
-
StreamTokenizer
类允许将输入流(Reader
对象)解析为标记(tokens),并允许以不同的方式处理这些标记。
属性:
-
nval
:包含当前标记的数值(如果当前标记是数字),否则为 0.0。 -
sval
:包含当前标记的字符串值(如果当前标记是字符串),否则为null
。 -
ttype
:指示当前标记的类型。可能的值有:TT_EOF
(-1,表示输入流的末尾)、TT_EOL
(10,表示换行符)、TT_NUMBER
(表示一个数字)、TT_WORD
(表示一个单词)以及具体的字符值(例如','
)。
构造方法
StreamTokenizer(Reader r)
:创建一个新的 StreamTokenizer
对象,使用指定的 Reader
对象作为输入流。
成员方法
public int nextToken() throws IOException
返回输入流中下一个有效的字符, 如果 == StreamTokenizer.TT_EOF, 就说明文件结束了.
StreamTokenizer的 nextToken()
方法, 会自动跳过输入流中的 空格 和 换行, 返回有效的字符
PrintWriter
构造函数
public PrintWriter (Writer out)
成员方法
public void println()
输出传入的数据.
public void flush()
将在缓冲区存储的数据全部输出.
给出数据量的模型
public class Main{// 静态创建数组private static int MAX_M = 100;private static int MAX_N = 100;private static int[][] data = new int[MAX_M][MAX_N];public static void main(String[] args) throws IOException {// 初始化输入流BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);// 初始化输出流PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));// 不断读取直至没有数据while(in.nextToken() != StreamTokenizer.TT_EOF){// 获取输入流中的数据int m = (int) in.nval;// 获取下一个数据in.nextToken();int n = (int) in.nval;// 初始化数据for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){in.nextToken();data[i][j] = (int)in.nval;}}// 处理数据(调用解决算法), 并输出答案out.println();}// 输出输出流中的所有数据out.flush();// 关闭输入流和输出流br.close();out.close();}}
按照行读
public class Main{private static String line;private static String[] part;public static void main(String[] args) throws IOException {// 输入流BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 输出流PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));// 每次读取一行while((line = br.readLine()) != null){// 分割字符串part = line.split(" ");// 处理数据}out.flush();out.close();br.close();}}
推荐练习平台
https://ac.nowcoder.com/acm/contest/5657。