JavaBeat

  • Home
  • Java
    • Java 7
    • Java 8
    • Java EE
    • Servlets
  • Spring Framework
    • Spring Tutorials
    • Spring 4 Tutorials
    • Spring Boot
  • JSF Tutorials
  • Most Popular
    • Binary Search Tree Traversal
    • Spring Batch Tutorial
    • AngularJS + Spring MVC
    • Spring Data JPA Tutorial
    • Packaging and Deploying Node.js
  • About Us
    • Join Us (JBC)
  • Privacy
  • Contact Us

Parsing Input using Scanner

September 25, 2007 by Krishna Srinivasan Leave a Comment

A Scanner object can be used to read text input from a number of sources. The input source can be a file, an input stream or even from a string. It internally uses the Regular Expression Api for parsing and getting the input. Let us see a simple example to parse a String object,

also read:

  • Java Tutorials
  • Java EE Tutorials
  • Design Patterns Tutorials
  • Java File IO Tutorials

[code lang=”java”]
Scanner scanner = new Scanner(‘Have a nice day’);
while (scanner.hasNext()){
System.out.println(scanner.next());
}
[/code]

In the above example, we have used the java.util.Scanner class for parsing the input from the String ‘Have a nice day’. Note that the default delimiter that the Scanner will use during parsing is white-space. If you run the above program, you will see the following output in your console,
[code]
Have
a
nice
day
[/code]

Now, let us see how to override the default delimiter during the scanning process using the following code,
[code lang=”java”]
Scanner scanner = new Scanner(‘Once upon a time, there lived a king’);
scanner.useDelimiter(‘,’);
while (scanner.hasNext()){
System.out.println(scanner.next());
}
[/code]

In the above code snippet, we have explicitly specified comma as the delimiter by calling the Scanner.useDelimter() method before the scanning process. The output in this case is,

[code]
Once upon a time
there lived a king
[/code]
The above examples assumed that the input will be always a text, however that wont be the case always, because of which we have method variants in the Scanner class that will operate on different data-types like integer, float, Boolean, byte, float etc. Consider the following code snippet which will illustrate that,
[code lang=”java”]
Scanner scanner = new Scanner(‘1 3 5 7 9 11 13’);
while (scanner.hasNextInt()){
System.out.println(scanner.nextInt());
}
[/code]

Note the use of Scanner.hasNextInt() and Scanner.nextInt() for parsing input with integer content. Similarly we have hasNextLong()/nextLong(), hasNextBoolean()/nextBoolean(), hasNextByte()/nextByte() for long, boolean and byte data-types respectively. It is also possible to parse a mixture of different data-types. For example, consider the following code snippet,
[code lang=”java”]
Scanner scanner = new Scanner(‘Hello 1 3.6 123456789000 true’);
System.out.println(scanner.hasNext() == true ? scanner.next() : ”);
System.out.println(scanner.hasNextInt() == true ? scanner.nextInt() : ”);
System.out.println(scanner.hasNextDouble() == true ? scanner.nextDouble() : ”);
System.out.println(scanner.hasNextLong() == true ? scanner.nextLong() : ”);
System.out.println(scanner.hasNextBoolean() == true ? scanner.nextBoolean() : ”);
[/code]

The output of the above code is,
[code]
Hello
1
3.6
[/code]
It is always advisable to check for the existence of the value with the correct data-type by calling the Scanner.hasNextXXX() methods before trying to get the value using Scanner.nextXXX() methods. If any mismatch is found, then InputMismatchException will be thrown at the run-time.

Scanner class has a close() method which should be called after being done with the various operations like this,
[code lang=”java”]
scanner.close();
[/code]

It is illegal to call any of the operations after closing the Scanner object and such calls will result in throwing IllegalStateException. As mentioned earlier, the input source for a Scanner object can originate not only from a String but also from a File or from an Input Stream. So, the following statements are valid too.
[code lang=”java”]
Scanner scanner = new Scanner(
new FileInputStream(‘someFile.txt’));

Scanner scanner = new Scanner(
new File(‘anotherFile.txt’));

[/code]

Filed Under: Java Tagged With: Core Java

About Krishna Srinivasan

He is Founder and Chief Editor of JavaBeat. He has more than 8+ years of experience on developing Web applications. He writes about Spring, DOJO, JSF, Hibernate and many other emerging technologies in this blog.

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

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

Follow Us

  • Facebook
  • Pinterest

As a participant in the Amazon Services LLC Associates Program, this site may earn from qualifying purchases. We may also earn commissions on purchases from other retail websites.

JavaBeat

FEATURED TUTORIALS

Answered: Using Java to Convert Int to String

What is new in Java 6.0 Collections API?

The Java 6.0 Compiler API

Copyright © by JavaBeat · All rights reserved