36

I am working on a program and I want to allow a user to enter multiple integers when prompted. I have tried to use a scanner but I found that it only stores the first integer entered by the user. For example:

Enter multiple integers: 1 3 5

The scanner will only get the first integer 1. Is it possible to get all 3 different integers from one line and be able to use them later? These integers are the positions of data in a linked list I need to manipulate based on the users input. I cannot post my source code, but I wanted to know if this is possible.

Riyas Valiyadan
  • 367
  • 3
  • 11
Steven
  • 455
  • 1
  • 5
  • 8
  • 1
    I am required to ask a user to enter integers between 1 and 5 all on one line. For ex. the user can enter 1 3 or 1 3 4. etc. – Steven May 07 '14 at 00:00
  • 1
    @S.M.AlMamun That does not work for my problem... The user input has to be on one line. – Steven May 07 '14 at 00:24

17 Answers17

39

I use it all the time on hackerrank/leetcode

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String  lines = br.readLine();    
        
    String[] strs = lines.trim().split("\\s+");
            
    for (int i = 0; i < strs.length; i++) {
    a[i] = Integer.parseInt(strs[i]);
    }
Prasanth Louis
  • 3,434
  • 2
  • 28
  • 41
12

Try this

public static void main(String[] args) {
    Scanner in = new Scanner(System.in); 
    while (in.hasNext()) {
        if (in.hasNextInt())
            System.out.println(in.nextInt());
        else 
            in.next();
    }
}

By default, Scanner uses the delimiter pattern "\p{javaWhitespace}+" which matches at least one white space as delimiter. you don't have to do anything special.

If you want to match either whitespace(1 or more) or a comma, replace the Scanner invocation with this

Scanner in = new Scanner(System.in).useDelimiter("[,\\s+]");
E.A.
  • 291
  • 1
  • 4
  • 13
10

You want to take the numbers in as a String and then use String.split(" ") to get the 3 numbers.

String input = scanner.nextLine();    // get the entire line after the prompt 
String[] numbers = input.split(" "); // split by spaces

Each index of the array will hold a String representation of the numbers which can be made to be ints by Integer.parseInt()

Deepak Sharma
  • 329
  • 3
  • 14
BitNinja
  • 1,418
  • 1
  • 19
  • 25
8

Scanner has a method called hasNext():

    Scanner scanner = new Scanner(System.in);

    while(scanner.hasNext())
    {
        System.out.println(scanner.nextInt());
    }
sendon1982
  • 7,088
  • 42
  • 36
6

If you know how much integers you will get, then you can use nextInt() method

For example

Scanner sc = new Scanner(System.in);
int[] integers = new int[3];
for(int i = 0; i < 3; i++)
{
    integers[i] = sc.nextInt();
}
Sk1X1
  • 1,216
  • 5
  • 18
  • 43
5

Java 8

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int arr[] = Arrays.stream(in.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
Rohit Kumar
  • 104
  • 1
  • 6
3

Here is how you would use the Scanner to process as many integers as the user would like to input and put all values into an array. However, you should only use this if you do not know how many integers the user will input. If you do know, you should simply use Scanner.nextInt() the number of times you would like to get an integer.

import java.util.Scanner; // imports class so we can use Scanner object

public class Test
{
    public static void main( String[] args )
    {
        Scanner keyboard = new Scanner( System.in );
        System.out.print("Enter numbers: ");

        // This inputs the numbers and stores as one whole string value
        // (e.g. if user entered 1 2 3, input = "1 2 3").
        String input = keyboard.nextLine();

        // This splits up the string every at every space and stores these
        // values in an array called numbersStr. (e.g. if the input variable is 
        // "1 2 3", numbersStr would be {"1", "2", "3"} )
        String[] numbersStr = input.split(" ");

        // This makes an int[] array the same length as our string array
        // called numbers. This is how we will store each number as an integer 
        // instead of a string when we have the values.
        int[] numbers = new int[ numbersStr.length ];

        // Starts a for loop which iterates through the whole array of the
        // numbers as strings.
        for ( int i = 0; i < numbersStr.length; i++ )
        {
            // Turns every value in the numbersStr array into an integer 
            // and puts it into the numbers array.
            numbers[i] = Integer.parseInt( numbersStr[i] );
            // OPTIONAL: Prints out each value in the numbers array.
            System.out.print( numbers[i] + ", " );
        }
        System.out.println();
    }
}
Mostafa
  • 59
  • 5
3

There is more than one way to do that but simple one is using String.split(" ") this is a method of String class that separate words by a spacial character(s) like " " (space)


All we need to do is save this word in an Array of Strings.

Warning : you have to use scan.nextLine(); other ways its not going to work(Do not use scan.next();

String user_input = scan.nextLine();
String[] stringsArray = user_input.split(" ");

now we need to convert these strings to Integers. create a for loop and convert every single index of stringArray :

for (int i = 0; i < stringsArray.length; i++) {
    int x = Integer.parseInt(stringsArray[i]);
    // Do what you want to do with these int value here
}

Best way is converting the whole stringArray to an intArray :

 int[] intArray = new int[stringsArray.length];
 for (int i = 0; i < stringsArray.length; i++) {
    intArray[i] = Integer.parseInt(stringsArray[i]);
 }

now do any proses you want like print or sum or... on intArray


The whole code will be like this :

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        String user_input = scan.nextLine();
        String[] stringsArray = user_input.split(" ");

        int[] intArray = new int[stringsArray.length];
        for (int i = 0; i < stringsArray.length; i++) {
            intArray[i] = Integer.parseInt(stringsArray[i]);
        }
    }
}
Abichellam
  • 479
  • 2
  • 5
  • 16
1

This works fine ....

int a = nextInt(); int b = nextInt(); int c = nextInt();

Or you can read them in a loop

2rd_7
  • 411
  • 3
  • 15
1

Using this on many coding sites:

  • CASE 1: WHEN NUMBER OF INTEGERS IN EACH LINE IS GIVEN

Suppose you are given 3 test cases with each line of 4 integer inputs separated by spaces 1 2 3 4, 5 6 7 8 , 1 1 2 2

        int t=3,i;
        int a[]=new int[4];

        Scanner scanner = new Scanner(System.in);

        while(t>0)  
        {
            for(i=0; i<4; i++){
                a[i]=scanner.nextInt();
                System.out.println(a[i]);
            }   

        //USE THIS ARRAY A[] OF 4 Separated Integers Values for solving your problem
            t--;
        }
  • CASE 2: WHEN NUMBER OF INTEGERS in each line is NOT GIVEN

        Scanner scanner = new Scanner(System.in);
    
        String lines=scanner.nextLine();
    
        String[] strs = lines.trim().split("\\s+");
    

    Note that you need to trim() first: trim().split("\\s+") - otherwise, e.g. splitting a b c will emit two empty strings first

        int n=strs.length; //Calculating length gives number of integers
    
        int a[]=new int[n];
    
        for (int i=0; i<n; i++) 
        {
            a[i] = Integer.parseInt(strs[i]); //Converting String_Integer to Integer 
            System.out.println(a[i]);
        }
    
Imene Noomene
  • 2,753
  • 5
  • 15
  • 33
1

created this code specially for the Hacker earth exam


  Scanner values = new Scanner(System.in);  //initialize scanner
  int[] arr = new int[6]; //initialize array 
  for (int i = 0; i < arr.length; i++) {
      arr[i] = (values.hasNext() == true ? values.nextInt():null);
      // it will read the next input value
  }

 /* user enter =  1 2 3 4 5
    arr[1]= 1
    arr[2]= 2
    and soo on 
 */ 

Evandro Teixeira
  • 111
  • 1
  • 13
1

It's working with this code:

Scanner input = new Scanner(System.in);
System.out.println("Enter Name : ");
String name = input.next().toString();
System.out.println("Enter Phone # : ");
String phone = input.next().toString();
Paul Roub
  • 35,100
  • 27
  • 72
  • 83
Pin Mc
  • 41
  • 4
0

You're probably looking for String.split(String regex). Use " " for your regex. This will give you an array of strings that you can parse individually into ints.

adv12
  • 8,051
  • 2
  • 22
  • 43
  • There is no reason to use a regex here, just read some ints directly from the stream using the Scanner. Also, using `" "` as regex is a bad idea, as it will cause problems with tabs and multiple spaces. Almost always, when splitting by spaces use "\\s+", and not " ". – amit May 06 '14 at 23:56
  • @amit Could you help me with this? – Steven May 07 '14 at 00:28
0

Better get the whole line as a string and then use StringTokenizer to get the numbers (using space as delimiter ) and then parse them as integers . This will work for n number of integers in a line .

    Scanner sc = new Scanner(System.in);
    List<Integer> l = new LinkedList<>(); // use linkedlist to save order of insertion
    StringTokenizer st = new StringTokenizer(sc.nextLine(), " "); // whitespace is the delimiter to create tokens
    while(st.hasMoreTokens())  // iterate until no more tokens
    {
        l.add(Integer.parseInt(st.nextToken()));  // parse each token to integer and add to linkedlist

    }
rogue_leader
  • 606
  • 1
  • 5
  • 16
0

Using BufferedReader -

StringTokenizer st = new StringTokenizer(buf.readLine());

while(st.hasMoreTokens())
{
  arr[i++] = Integer.parseInt(st.nextToken());
}
0

When we want to take Integer as inputs
For just 3 inputs as in your case:

import java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a,b,c;
a = scan.nextInt();
b = scan.nextInt();
c = scan.nextInt();

For more number of inputs we can use a loop:

import java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a[] = new int[n]; //where n is the number of inputs
for(int i=0;i<n;i++){
    a[i] = scan.nextInt();    
}
-1

i know it's old discuss :) i tested below code it's worked

`String day = "";
 day = sc.next();
 days[i] = Integer.parseInt(day);`