C# TextReader.Peek – 预读取下一个字符

  • Post category:C#

TextReader.Peek 方法是C#中一个用于读取文本流字符的方法,该方法可读取文本流中下一个字符并返回其Unicode编码,但并不读取该字符。下面是该方法的详细解释和使用方法攻略:

方法签名

public virtual int Peek ();

返回值

Peek() 方法返回整数,即下一个字符的Unicode编码。如果没有可供读取的字符,则返回 -1。

使用方法

Peek() 方法主要用于检测文本流中是否有下一个字符可读取,以便在读取这个字符之前进行一些操作。一般来说,Peek() 方法可以和Read() 方法一起使用,以判断需要读取的字符类型。

Peek() 方法具体使用方法如下:

  1. 创建一个TextReader对象,并打开文本流。通常情况下,可以使用StreamReader类来打开文本文件。
    csharp
    StreamReader sr = new StreamReader("file.txt");
  2. 定义一个变量存储Peek()方法返回值,并调用Peek()方法。
    csharp
    int nextChar = sr.Peek();
  3. 判断返回值是否为 -1。如果是 -1,则表示文本流中没有可供读取的字符;否则,返回值就是下一个字符的Unicode编码。
    csharp
    if (nextChar != -1)
    {
    // 操作
    }
  4. 在操作完成后,使用Read()方法读取下一个字符。
    csharp
    char ch = (char) sr.Read();

示例说明

以下是一个示例,展示如何用Peek()方法判断文本流中下一个字符是否为数字或字母。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string str = "This is a 123 Demo Text.";

        // 创建StreamReader对象
        StreamReader sr = new StreamReader(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(str)), System.Text.Encoding.UTF8);

        // Peek()方法读取下一个字符
        int nextChar = sr.Peek();
        while (nextChar != -1)
        {
            char ch = (char)nextChar;
            if (Char.IsDigit(ch))
            {
                Console.WriteLine("Next character is a digit.");
            }
            else if (Char.IsLetter(ch))
            {
                Console.WriteLine("Next character is a letter.");
            }

            // Read()方法读取下一个字符
            ch = (char)sr.Read();

            // Peek()方法读取下一个字符
            nextChar = sr.Peek();
        }

        sr.Close();
    }
}

运行结果:

Next character is a letter.
Next character is a letter.
Next character is a letter.
Next character is a letter.
Next character is a letter.
Next character is a digit.
Next character is a digit.
Next character is a digit.
Next character is a letter.
Next character is a letter.
Next character is a letter.
Next character is a letter.
Next character is a letter.
Next character is a letter.
Next character is a letter.
Next character is a letter.
Next character is a letter.

以上示例使用StreamReader和MemoryStream读取一个字符串。Peek()方法和Read()方法循环读取字符串中的字符,并检查下一个字符是否为数字或字母。如果是数字,就在控制台输出“Next character is a digit.”;如果是字母,就在控制台输出“Next character is a letter.”。

另一个示例:使用Peek()方法进行流的复制。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // 创建StreamReader对象
        StreamReader sr = new StreamReader("file.txt");

        // 创建StreamWriter对象
        StreamWriter sw = new StreamWriter("file_copy.txt");

        // Peek()/Read()方法复制文本流
        int nextChar = sr.Peek();
        while (nextChar != -1)
        {
            sw.Write((char)nextChar);
            nextChar = sr.Read();
            nextChar = sr.Peek();
        }

        sr.Close();
        sw.Close();
    }
}

以上示例使用StreamReader和StreamWriter将一个文本文件进行复制。Peek()方法和Read()方法循环读取文件中的字符,并将它们写入到另一个文件中。

这些示例都展示了Peek()方法的基本使用方法。Peek()方法是一个非常有用的方法,使用它可以预测流中下一个字符的类型。