【蓝桥杯】Java组必备API类 --快速读写实现方法 及输入输出的巧妙处理

【蓝桥杯】Java组必备API类 --快速读写实现方法 及输入输出的巧妙处理_第1张图片

输入和输出

输入
Scanner s = new Scanner(System.in);  //声明一个从控制台中读入数据的对象
int x = s.nextInt();
double x = s.nextDouble()String x = s.next();  //无法读入空格
String x = s.nextLine();  //可以读入空格,遇到换行停止

while(s.hasNext()) {  //hasNext() 判断还有没有读入值 相当于while(scanf())
    //如果有字符,返回true,否则阻塞
    //hasNext()不会返回false
}
s.hasNextInt();  //判断输入是否为int,是则返回,否则阻塞
s.hasNextDouble();  //判断输入是否为double,是则返回,否则阻塞
输出
System.out.println();
System.out.print();  
System.out.printf();  //格式化输出

prinf()函数与C++中的prinf相同

print()和println()的区别是println()换行

封装输入和输出

通过重写函数的形式来缩写输入和输出,具体情况如下所示

输入
static int gtInt() {
    int x = sc.nextInt();
    return x;
}
输出
static void print(int x) {
    System.out.print(x);
}


static void println(int x) {
    System.out.println(x);
}
快速读写

构造:

BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(System.out));
int x = r.read();  //读取一个字符并将其转换为UTF-8的值
eg: 输入123213123,x只能读取到1
String x = r.readLine();  //读取一行的值
String[] x = r.readLine().split(' ');  //分割字符形成字符串

需要注意的是 在windows中按一下回车键 一共有两个字符 “\n\r” 而read()只能读取一个字符所以如要要用read来达到吸收回车的目的,需要用两个read(); 如果用readLine()的话会将"\n\r"全部吸收 , 所以只需要一个readLine()来吸收回车

w.write(x);
w.write("\n");
w.flush();
w.write(Integer.toString(x));  //输出int型变量

需要注意的是 write() 不能直接输出int类型, 因为write(int a) 会输出其对应的ASCii码的字符

eg:write(65); => A

由于java是面向对象的语言,所以这里将快读和快写封装成类比较好用一些。

快读类

StreamTokenizer读取字符类型,而BufferedReader读取字符串。这里买呢StreamTokenizer也可以读取字符串,但是不会读取特殊符号和数字,所以我们最好用BufferedReader读取。

static class FastRead {
    StreamTokenizer streamTokenizer;  //读取数字
    BufferedReader bufferedReader;  //读取字符串

    public FastRead() {
        streamTokenizer = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        br = new BufferedReader(new InputStreamReader(System.in));
    }

    int gtInt() throws IOException {
        streamTokenizer.nextToken();
        int x = (int) streamTokenizer.nval;
        return x;
    }

    long gtLong() throws IOException {
        streamTokenizer.nextToken();
        long l = (long) streamTokenizer.nval;
        return l;
    }

    double gtDouble() throws IOException {
        streamTokenizer.nextToken();
        double x = streamTokenizer.nval;
        return x;
    }

    String gtString() throws IOException {
        String s = bufferedReader.readLine();
        return s;
    }
}
快写类

快速输出这里我们选用的是printWriter。

static class FastWrite {

   PrintWriter printWriter;

    public FastWrite() {
        printWriter = new PrintWriter(new OutputStreamWriter(System.out));
    }

    void print(int x) {
        printWriter.print(x);
    }

    void print(String sc) {
        printWriter.print(sc);
    }

    void print(double x) {
        printWriter.print(x);
    }

    void println(int x) {
        printWriter.println(x);
    }
    
    void println(double x) {
        printWriter.println(x);
    }
}

你可能感兴趣的:(蓝桥杯,java,算法,蓝桥杯)