Scanner和BufferReader用法详记

首先,我们应该对Java中的Scanner类和BufferReader类有一个比较详细的认识,二者在方法的设置和显示上都有比较规律的设置,因此掌握好方法进行记忆会比较简单。



关于Scanner


Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。
输入数据的类Scanner,位于java.util包中,Scanner的具体用法为Scanner input = new Scanner(System.in);通过 new创建一个Scanner对象,Scanner需要传入一个System.in作为参数,我们可以看作是Scanner通过其内部机制将 System.in包装起来而实现数据的读取工作的。Scanner对象通过一系列的input.nextxxx();方法来读取相应的基本类型的数据,通过input.hasNextxxx();方法来判断是否还有下一个数据。input.nextLine() 输入一行数据,一般会将你输入的数据当做字符串处理
需要注意的是,Scanner读取数据是按空格符,这其中包括空格键,Tab键,Enter键。只要遇到其中之一,Scanner的方法就会返回下一个输入 ,Scanner类默认使用的分隔符(delimiter)是空格可以调用Scanner类里的useDelimiter方法,设置它的分隔符,从而解决问题

关于BufferReader


BufferReader位于java.io包中,读取数据比较固定,这样格式也就相对来说比较单一,只要记住就这一读取数据的方法BufferReader br = new BufferReader(new InputStreamReader(System.in)); 这个BufferReader对象通过readLine();方法来读取数据,readLine()是按Enter回车来读取一行数据的,只要在回车键之前的都会被readLine();方法返回,然而,要使用BufferReader输入一些字符之外的类型的数据,就要相对比较麻烦,需要通过一些XXXX.parseXxx();来转换相应的数据类型,虽然,麻烦一些,但通过在一些OJ系统上的和Scanner作对比,BufferReader的效率要比Scanner高一倍,这个差距可想而知,读取的数据越多,效果就越明显。

下面是针对Scanner类的使用的一个小题目,也体现出其灵活的运用:
题目

import java.util.Scanner;

public class abcplus1 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a = input.nextInt();
        int b = input.nextInt();
        int c = input.nextInt();
        if(a >= -40 && a <= 40 &&b >= -40 && b <= 40 &&c >= -40 && c <= 40)
            System.out.println(a+b+c);
        else return;
    }
}

在读取数据方面以上这种方法比较繁琐,不过体现了.nextxxx可以连续读入符合条件的值。当需要的数据较多时可以采用循环的方式进行处理。

import java.util.Scanner;

public class abcplus1 {
    public static void main(String[] args) {
        int sum = 0;
        Scanner input = new Scanner(System.in);
        //String inp = input.nextLine();
        //char[] cchar = inp.toCharArray();
        //int[] arr = new int[cchar.length];
        for(int i = 0; i < 3; i++) {
            if(input.hasNextInt()) {
                int j = input.nextInt();
                if(j >= -40 && j <= 40)
                    sum += j;
            }
            else continue;
        }
        System.out.println(sum);

    }
}
### 回答1: ScannerBufferedReader都是Java中用于读取输入流的类。 Scanner是一个方便的类,可以从各种输入源(如文件、控制台、字符串等)读取数据,并将其转换为Java基本类型或字符串。Scanner类提供了许多方法,如next()、nextInt()、nextLine()等,可以根据需要读取不同类型的数据。 BufferedReader是一个更底层的类,它可以从字符输入流中读取字符,并将其缓冲到内存中。BufferedReader类提供了read()、readLine()等方法,可以读取字符或一行字符。与Scanner不同,BufferedReader不能直接将输入转换为Java基本类型,需要使用其他方法进行转换。 ### 回答2: ScannerJava的一个类,它提供了一种方便的方式来读取用户输入和文件内容。通过Scanner,我们可以从控制台接收用户的输入,并对输入进行有效的处理。Scanner具有一系列的方法,如nextInt()、nextDouble()等,可以读取不同类型的输入数据。它还具有一些方便的方法,如hasNextInt()、hasNextLine()等,用于判断输入流中是否还有下一个输入数据或行。 BufferedReaderJava的一个类,它提供了一种高效的字符流读取方式。相比于直接从底层输入流中读取字符,BufferedReader会对输入流进行缓冲,从而提升读取效率。它还提供了一系列的方法,如readLine()、read()等,用于读取字符或一行字符数据。与Scanner不同的是,BufferedReader只能读取字符数据,并且该类不提供直接读取其他类型数据的方法。 Scanner适合用于获取用户输入,比如读取输入的整数或浮点数,并进行相应的处理。它的优点是简单易用,并且提供了一系列的方便的方法用于输入的验证。但是当需要读取大量的数据时,Scanner的效率会比较低下,因为它是基于正则表达式的处理。 BufferedReader适合用于读取文件内容或其他字符数据,并且能够提升读取的效率。使用BufferedReader时,我们可以一次读取一行数据,提高处理的效率。但是相比于ScannerBufferedReader相对复杂一些,使用起来需要更多的代码。 总结来说,ScannerBufferedReader都是用于读取输入的类,但是它们的使用场景和适用性略有区别。根据具体的需求和情况,我们可以选择合适的类来读取输入数据。 ### 回答3: ScannerBufferedReader都是Java中用于读取输入数据的类。 Scanner是一个用于读取基本类型和字符串的简单文本扫描器。它提供了方便的方法来解析和提取输入数据。Scanner可以从不同类型的输入源(如标准输入、文件等)读取数据,并将其转换为所需的类型。它可以处理不同格式的输入数据,如整数、实数、布尔值、字符串等。Scanner还提供了方法来判断输入数据是否符合所需格式,以及在输入数据不符合格式时如何处理错误。 BufferedReader是一个用于高效读取字符文本的缓冲输入流。它读取字符并存储在内部缓冲区中,从而提高了读取性能。BufferedReader可以从不同类型的输入源(如文件、字符流等)读取字符数据,并按行读取数据。它提供了方法来逐行读取文本数据,并提供了一些额外的方法,如跳过行、标记位置和重置等。BufferedReader还可以与其他类一起使用,如InputStreamReader来读取字节流并转换为字符流。 ScannerBufferedReader在功能和用途上有一些不同。Scanner适用于读取不同类型的输入数据,并提供了更多的数据转换和格式验证方法。它适用于需要以不同格式读取输入数据的场景。而BufferedReader适用于高效地读取字符文本,特别是逐行读取文本数据的场景。它适用于处理大量文本数据的情况,例如读取大文件或网络数据。 总的来说,ScannerBufferedReader都是用于读取输入数据的工具,但根据具体的需求和场景选择适合的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值