Core Java

Java Input Handling: Read Multiple Integers from One Line

Using the Scanner class is a common way to read user input in Java. However, if you are trying to read multiple integers from a single line of input, you might encounter issues like only retrieving the first integer. In this article, we will explore how to read and process multiple integers from one line of input using several approaches, including Scanner, BufferedReader, and Java Streams.

1. Problem Statement

Imagine we are developing a program where a user needs to input multiple integers in a single line, separated by spaces. For example:

Enter multiple integers: 5 12 8 3

The program should correctly retrieve these integers as 5, 12, 8, and 3 for further processing. However, if not handled correctly, only the first integer might be read, or errors may occur.

2. Using Scanner

The Scanner class is a versatile tool in Java for handling user input. It can be used to read multiple integers from a single line of input, either by repeatedly reading integers until the input ends or by reading the entire line and parsing it. Below are two approaches to solving this problem using Scanner.

2.1 Using a Loop with scanner.hasNext()

This method continuously reads integers from the input stream until no more input is available.

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ReadMultipleIntegersScannerLoop {

    public static void main(String[] args) {
        // Create a Scanner object to read input
        Scanner scanner = new Scanner(System.in);

        System.out.println("Enter multiple integers (end input with a non-integer or EOF):");

        // Create a list to store the integers
        List<Integer> inputs = new ArrayList<>();

        // Read integers until no more input is available
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                inputs.add(scanner.nextInt());
            } else {
                // Exit loop if input is not an integer
                break;
            }
        }

        System.out.println("You entered: " + inputs);

        scanner.close();
    }
}

This method uses scanner.hasNext() to check if there is more input available, ensuring the program continuously reads input from the user. Before reading, scanner.hasNextInt() verifies that the next input is an integer, avoiding errors. Each valid integer is added to a list using inputs.add(scanner.nextInt()).

The loop exits when a non-integer is entered. Finally, the program prints the entered integers as a list:

Sample Output: Reading Multiple Integers from a Single Line in Java

2.2 Reading a Line and Parsing Using Streams

This method reads the entire line as a string, splits it into individual numbers, and parses each number into an integer.

import java.util.Arrays;
import java.util.Scanner;

public class ReadMultipleIntegersScannerStream {

    public static void main(String[] args) {
        // Create a Scanner object to read input
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter multiple integers separated by spaces:");

        // Read the entire input line
        String inputs = scanner.nextLine();

        // Split the input and parse integers into an array
        int[] parsedNumbers = Arrays.stream(inputs.split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();

        System.out.print("You entered: ");
        System.out.print(Arrays.toString(parsedNumbers));

        scanner.close();
    }
}

In this example, scanner.nextLine() reads the entire line of input as a string, while inputs.split(" ") splits the string into an array of substrings using spaces as delimiters. The method Arrays.stream(...).mapToInt(Integer::parseInt).toArray() converts the array of strings into a stream, maps each string to its integer equivalent using Integer.parseInt, and collects the resulting integers into an array.

3. Using BufferedReader

The BufferedReader class is a robust way to read input, especially when performance is a concern or when handling large inputs. This solution involves using BufferedReader to read the input as a string, trimming spaces, splitting it into substrings, converting each to an integer with Integer.parseInt(), and storing them in an array or list.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class ReadMultipleIntegersBufferedReader {

    public static void main(String[] args) throws IOException {
        // Create a BufferedReader object to read input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter multiple integers separated by spaces:");

        // Read the entire input line
        String lines = br.readLine();

        // Split the input string into an array of substrings
        String[] strs = lines.trim().split("\\s+");

        // Create an array to store the integers
        int[] a = new int[strs.length];

        // Convert each substring into an integer and store in the array
        for (int i = 0; i < strs.length; i++) {
            a[i] = Integer.parseInt(strs[i]);
        }

        System.out.print("You entered: ");
        System.out.print(Arrays.toString(a));
    }
}

In this example, BufferedReader efficiently reads input from the console by wrapping around InputStreamReader, which converts bytes into characters. The br.readLine() method reads the entire input line as a single string. The lines.trim().split("\\s+") step removes any leading or trailing spaces from the string and then splits it into an array of substrings wherever one or more spaces occur. Each substring, representing an integer, is parsed using Integer.parseInt() and stored in an integer array.

4. Conclusion

In this article, we explored different ways to read multiple integers from a single line in Java, including using the Scanner class with a loop and streams, and the BufferedReader for efficient input handling.

5. Download the Source Code

This article explored how to read multiple integers from a single line of input in Java.

Download
You can download the full source code of this example here: Java read multiple integers one line

Omozegie Aziegbe

Omos Aziegbe is a technical writer and web/application developer with a BSc in Computer Science and Software Engineering from the University of Bedfordshire. Specializing in Java enterprise applications with the Jakarta EE framework, Omos also works with HTML5, CSS, and JavaScript for web development. As a freelance web developer, Omos combines technical expertise with research and writing on topics such as software engineering, programming, web application development, computer science, and technology.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button