java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java Scanner、BufferedReader 和 StreamTokenizer

Java中的Scanner、BufferedReader 和 StreamTokenizer使用详解

作者:nmblr

Scanner是Java 中一个用于解析原始类型(如 int、double 等)和字符串的类,它通常从输入流中逐个读取数据并进行解析,支持多种分隔符的使用,本文介绍Java中的Scanner、BufferedReader 和 StreamTokenizer的相关知识,感兴趣的朋友一起看看吧

1. Scanner 的使用与分析

简介:

Scanner 是 Java 中一个用于解析原始类型(如 intdouble 等)和字符串的类。它通常从输入流中逐个读取数据并进行解析,支持多种分隔符的使用。其方法比较灵活,能够处理不同类型的数据输入。

常用方法:

性能:

Scanner 相较于 BufferedReader 在性能上稍逊一筹,尤其是在大量数据输入时,因为每次读取时都要进行格式检查和解析。

错误处理:

Scanner 在读取不符合格式的数据时,通常会抛出异常,需要通过异常处理来管理。

适用场景

适用于简单、格式规范的输入,尤其是处理基本数据类型的输入时。

代码示例:Scanner 的基本使用

import java.util.Scanner;
public class ScannerExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter a string:");
        String inputString = scanner.nextLine();  // 读取一行文本
        System.out.println("You entered: " + inputString);
        System.out.println("Enter an integer:");
        int inputInt = scanner.nextInt();  // 读取整数
        System.out.println("You entered the number: " + inputInt);
        System.out.println("Enter a double:");
        double inputDouble = scanner.nextDouble();  // 读取浮点数
        System.out.println("You entered the double: " + inputDouble);
        scanner.close();
    }
}

2. BufferedReader 的使用与分析

简介:

BufferedReader 是 Java 中一个用于读取字符输入流的类。它提供了缓冲功能,可以减少每次读取时的 I/O 操作,从而提高性能。通常,BufferedReader 用于逐行读取数据。

常用方法:

性能:

BufferedReader 通过缓冲机制提高了读取大量数据的性能,尤其是在处理文件读取时表现得尤为明显。

错误处理:

BufferedReader 对于错误的输入通常不会抛出异常,而是返回 null,需要显式判断和处理。

适用场景:

适用于处理大量文本输入,尤其是对性能有较高要求的场景。它适合从文件或者标准输入中读取大块数据。

代码示例:BufferedReader 的基本使用

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class BufferedReaderExample {
    public static void main(String[] args) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.println("Enter a line of text:");
            String input = reader.readLine();  // 读取一行文本
            System.out.println("You entered: " + input);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

3. StreamTokenizer 的使用与分析

简介:

StreamTokenizer 是 Java 中用于将输入流分割为标记(tokens)的类。它通过读取字符流并按指定规则将输入流中的字符切割为有意义的单词、数字等标记,适合用来解析结构化文本。

常用方法:

性能:

StreamTokenizer 在解析文本时性能较高,因为它以流的形式逐字符地读取输入,不会占用过多内存。

错误处理:

StreamTokenizer 在遇到无法识别的字符时会跳过,直到下一个有效的标记。它通常不会抛出异常。

适用场景:

适用于需要精确控制标记化输入流的场景,尤其是在文本分析和解析时。

代码示例:StreamTokenizer 的基本使用

import java.io.*;
import java.util.*;
public class Main {
    static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    public static void main(String[] args) throws IOException {
        int n = nextInt();
    }
    public static int nextInt() throws IOException {
        st.nextToken();
        return (int)st.nval;
    }
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.StreamTokenizer;
public class StreamTokenizerExample {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter some text:");
        processTokens(reader);  // 处理输入的标记
    }
    /**
     * 处理输入的文本并打印每个标记。
     * @param reader 输入流
     * @throws IOException 读取流时抛出的异常
     */
    public static void processTokens(BufferedReader reader) throws IOException {
        // 创建 StreamTokenizer 对象
        StreamTokenizer tokenizer = new StreamTokenizer(reader);
        // 遍历输入流,处理每个标记
        while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
            processTokenByType(tokenizer);  // 根据标记类型处理
        }
    }
    /**
     * 根据不同的标记类型处理输入
     * @param tokenizer StreamTokenizer 对象
     */
    public static void processTokenByType(StreamTokenizer tokenizer) {
        try {
            switch (tokenizer.ttype) {
                case StreamTokenizer.TT_WORD:
                    System.out.println("Word: " + tokenizer.sval);  // 处理单词
                    break;
                case StreamTokenizer.TT_NUMBER:
                    System.out.println("Number: " + tokenizer.nval);  // 处理数字
                    break;
                case StreamTokenizer.TT_EOL:
                    System.out.println("End of line encountered.");  // 处理行结束符
                    break;
                case StreamTokenizer.TT_EOF:
                    // EOF 不需要处理
                    break;
                default:
                    System.out.println("Other: " + (char) tokenizer.ttype);  // 处理其他字符
                    break;
            }
        } catch (IOException e) {
            // 统一抛出异常
            throw new RuntimeException("Error processing the token", e);
        }
    }
}

总结

到此这篇关于Java中的Scanner、BufferedReader 和 StreamTokenizer的文章就介绍到这了,更多相关Java Scanner、BufferedReader 和 StreamTokenizer内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文