Search code examples
javajava.util.scannerdelimiter

How do I verify if the next token in a Scanner class is empty in order to differentiate between loop conditions?


I am attempting to solve a problem given to us by our professor. I need to sort through a file, data.txt, by appending occurrences of ; with a blank space and occurrences of ;; with a new line. I am having an issue determining the syntax of the else if clause in the while loop.

Data.txt contains the following 2 lines:

john;88;CARL;;JAFF
HELEN;MARY;;123;99

The current code is as follows:

import java.io.*;
import java.util.*;

class Delimit {
    public static void main(String[] args) throws IOException {
        // Initiates new FileInputStream to read text document
        File f = new File("data.txt");
        // Initiates new Scanner to parse the file, and delimit at ";"
        Scanner s = new Scanner(f).useDelimiter(";");

        // Parses through each token
        while (s.hasNext()) {
            // 
            if (s.hasNext()) {
                // Prints next token followed by a space
                System.out.print(s.next() + " ");
            }
            // else if (next token is empty) {
                // Prints next token followed by a new line
                System.out.print(s.next() + "\n");
            }
        }
        s.close(); // Closes the Scanner
    }
}

If there is a better approach to the delimiting and replacing methods, please enlighten me! I have been trying to improve my grasp on regex and the delimitation of strings. Thanks!


Solution

  • public static void main(String... args) throws FileNotFoundException {
        try (Scanner scan = new Scanner(new File("data.txt"))) {
            scan.useDelimiter("[;\r]"); // \r as line separator in the file under Windows
            boolean addSpace = false;
    
            while (scan.hasNext()) {
                String str = scan.next().trim();
    
                if (str.isEmpty()) {
                    System.out.println();
                    addSpace = false;
                } else {
                    if (addSpace)
                        System.out.print(' ');
    
                    addSpace = true;
                    System.out.print(str);
                }
            }
        }
    }