Java - PushbackReader unread(int c) method



Description

The Java PushbackReader unread(int c) method pushes back a single character by copying it to the front of the pushback buffer. After this method returns, the next character to be read will have the value (char)c.

unread(int c) method −

  • Purpose − Pushes back a single character so that it will be returned by the next read().

  • Can be used for lookahead or reprocessing characters.

  • If the pushback buffer is full, it throws an IOException.

Declaration

Following is the declaration for java.io.PushbackReader.unread(int c) method.

public void unread(int c)

Parameters

c − The int value representing a character to be pushed back.

Return Value

This method does not return a value.

Exception

IOException − If there is insufficient room in the pushback buffer, or if some other I/O error occurs.

Example - Usage of PushbackReader unread(int c) method

The following example shows the usage of PushbackReader unread(int c) method.

PushbackReaderDemo.java

package com.tutorialspoint;

import java.io.IOException;
import java.io.PushbackReader;
import java.io.StringReader;

public class PushbackReaderDemo {
   public static void main(String[] args) {
      String s = "Hello World";

      // create a new StringReader
      StringReader sr = new StringReader(s);

      // create a new PushBack reader based on our string reader
      PushbackReader pr = new PushbackReader(sr, 20);

      try {
         // read the first five chars
         for (int i = 0; i < 5; i++) {
            char c = (char) pr.read();
            System.out.print("" + c);
         }

         // change line
         System.out.println();

         // unread a character
         pr.unread('F');

         // read the next char, which is the one we unread
         char c = (char) pr.read();

         // print that character
         System.out.println("" + c);

         // close the stream
         pr.close();

      } catch (IOException ex) {
         ex.printStackTrace();
      }
   }
}

Output

Let us compile and run the above program, this will produce the following result −

Hello
F

Example - Push back one character and read it again

The following example shows the usage of PushbackReader unread(int c) method.

PushbackReaderDemo.java

package com.tutorialspoint;

import java.io.IOException;
import java.io.PushbackReader;
import java.io.StringReader;

public class PushbackReaderDemo {
   public static void main(String[] args) {
      try (PushbackReader reader = new PushbackReader(new StringReader("Hello"), 5)) {
         int ch = reader.read();  // Reads 'H'
         System.out.println("Read character: " + (char) ch);

         reader.unread(ch);  // Push back 'H'
         System.out.println("Character unread.");

         int reread = reader.read();  // Reads 'H' again
         System.out.println("Read after unread: " + (char) reread);
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output

Let us compile and run the above program, this will produce the following result−

Read character: H  
Character unread.  
Read after unread: H

Explanation

  • 'H' is read, pushed back, and read again.

  • This shows how unread(int) can reverse a read operation temporarily.

Example - Push back only digits during parsing

The following example shows the usage of PushbackReader unread(int c) method.

PushbackReaderDemo.java

package com.tutorialspoint;

import java.io.IOException;
import java.io.PushbackReader;
import java.io.StringReader;

public class PushbackReaderDemo {
   public static void main(String[] args) {
      try (PushbackReader reader = new PushbackReader(new StringReader("123A456"), 10)) {
         int ch;
         while ((ch = reader.read()) != -1) {
            if (!Character.isDigit(ch)) {
               reader.unread(ch);  // Push back the non-digit
               System.out.println("Non-digit encountered and pushed back: " + (char) ch);
               break;
            }
            System.out.println((char) ch);
         }

         // Read the non-digit after the digits
         System.out.println("\nNext character after digits: " + (char) reader.read());

      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output

Let us compile and run the above program, this will produce the following result−

1
2
3
Non-digit encountered and pushed back: A
Next character after digits: A

Explanation

  • The code reads digits until it finds 'A'.

  • 'A' is unread (pushed back), then processed separately.

  • Useful in parsers where you need to "peek" ahead.

java_io_pushbackreader.htm
Advertisements