{"id":108865,"date":"2026-05-02T14:44:43","date_gmt":"2026-05-02T09:14:43","guid":{"rendered":"https:\/\/www.guvi.in\/blog\/?p=108865"},"modified":"2026-05-02T14:44:45","modified_gmt":"2026-05-02T09:14:45","slug":"scanner-class-in-java","status":"publish","type":"post","link":"https:\/\/www.guvi.in\/blog\/scanner-class-in-java\/","title":{"rendered":"Scanner Class in Java: A Complete Guide to Reading User Input"},"content":{"rendered":"\n<p>Reading user input is one of the first challenges every Java programmer faces. You want to create interactive programs that respond to what users type, but how do you actually capture that input?<\/p>\n\n\n\n<p>The Scanner class is Java&#8217;s built-in solution for reading input from various sources, including the keyboard, files, and strings. It&#8217;s simple, powerful, and essential for any Java developer to master.<\/p>\n\n\n\n<p>In this guide, you&#8217;ll learn everything about the Scanner class, from basic usage to advanced techniques that will make your Java programs truly interactive.<\/p>\n\n\n\n<p><strong>Quick TL;DR Summary<\/strong><\/p>\n\n\n\n<ol>\n<li>This guide explains what the Scanner class is and how it enables Java programs to read input from users, files, and other sources.<br><\/li>\n\n\n\n<li>You will learn the fundamental methods for reading different data types, including strings, integers, doubles, and boolean values.<br><\/li>\n\n\n\n<li>The guide covers common use cases like reading keyboard input, processing file data, and handling input validation.<br><\/li>\n\n\n\n<li>Step-by-step examples demonstrate how to create Scanner objects, handle exceptions, and avoid common pitfalls like buffer issues.<br><\/li>\n\n\n\n<li>You will understand best practices for using Scanner effectively and when to close resources properly.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">What Is the Scanner Class?<\/h2>\n\n\n\n<p>The Scanner class is a built-in Java class located in the java.util package that breaks down formatted input into tokens and translates them into different data types. It provides a simple way to read primitive types and strings from various input sources.<\/p>\n\n\n\n<p>Before Scanner was introduced in Java 5, reading input required complex code using <a href=\"https:\/\/guvi.in\/hub\/java-examples-tutorial\/java-bufferedreader\/\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/guvi.in\/hub\/java-examples-tutorial\/java-bufferedreader\/\" rel=\"noreferrer noopener\">BufferedReader<\/a> and <a href=\"https:\/\/www.guvi.in\/hub\/java-tutorial\/java-i-o-stream\/\" target=\"_blank\" rel=\"noreferrer noopener\">InputStreamReader<\/a>. Scanner simplified this process dramatically, making it the go-to choice for reading input in Java programs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Import Statement<\/strong><\/h2>\n\n\n\n<p>Before using Scanner, you must import it:<\/p>\n\n\n\n<p>import java.util.Scanner;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Creating a Scanner Object<\/strong><\/h2>\n\n\n\n<p>Here are the most common ways to create Scanner objects:<\/p>\n\n\n\n<ol>\n<li><strong>Reading from Keyboard (System.in)<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Scanner scanner = new Scanner(System.in);<\/p>\n\n\n\n<ol start=\"2\">\n<li><strong>Reading from a File<\/strong><\/li>\n<\/ol>\n\n\n\n<p>File file = new File(&#8220;data.txt&#8221;);<\/p>\n\n\n\n<p>Scanner scanner = new Scanner(file);<\/p>\n\n\n\n<ol start=\"3\">\n<li><strong>Reading from a String<\/strong><\/li>\n<\/ol>\n\n\n\n<p>String text = &#8220;Welcome to HCL GUVI&#8221;;<\/p>\n\n\n\n<p>Scanner scanner = new Scanner(text);<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Essential Scanner Methods<\/strong><\/h2>\n\n\n\n<p>The <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/Scanner.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Scanner class<\/a> provides numerous methods for reading different data types:<\/p>\n\n\n\n<ol>\n<li><strong>Reading Strings<\/strong><\/li>\n<\/ol>\n\n\n\n<p><strong>next()<\/strong> &#8211; Reads a single word up to the next whitespace.<\/p>\n\n\n\n<p>String word = scanner.next();<\/p>\n\n\n\n<p><strong>nextLine()<\/strong> &#8211; Reads an entire line including spaces.<\/p>\n\n\n\n<p>String line = scanner.nextLine();<\/p>\n\n\n\n<ol start=\"2\">\n<li><strong>Reading Numbers<\/strong><\/li>\n<\/ol>\n\n\n\n<p><strong>nextInt()<\/strong> &#8211; Reads an integer value.<\/p>\n\n\n\n<p>int number = scanner.nextInt();<\/p>\n\n\n\n<p><strong>nextDouble()<\/strong> &#8211; Reads a double value.<\/p>\n\n\n\n<p>double decimal = scanner.nextDouble();<\/p>\n\n\n\n<p><strong>nextFloat()<\/strong> &#8211; Reads a float value.<\/p>\n\n\n\n<p><strong>nextLong()<\/strong> &#8211; Reads a long value.<\/p>\n\n\n\n<ol start=\"3\">\n<li><strong>Reading Boolean<\/strong><\/li>\n<\/ol>\n\n\n\n<p><strong>nextBoolean()<\/strong> &#8211; Reads a boolean value (true or false).<\/p>\n\n\n\n<p>boolean flag = scanner.nextBoolean();<\/p>\n\n\n\n<ol start=\"4\">\n<li><strong>Checking for Input<\/strong><\/li>\n<\/ol>\n\n\n\n<p><strong>hasNext()<\/strong> &#8211; Returns true if there is another token available.<\/p>\n\n\n\n<p><strong>hasNextInt()<\/strong> &#8211; Returns true if the next token can be interpreted as an integer.<\/p>\n\n\n\n<p>if (scanner.hasNextInt()) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;int number = scanner.nextInt();<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>Similar methods exist for other data types: hasNextDouble(), hasNextBoolean(), hasNextLine().<\/p>\n\n\n\n<p><strong>Read More:<\/strong> <a href=\"https:\/\/www.guvi.in\/blog\/getting-started-with-java\/\" target=\"_blank\" rel=\"noreferrer noopener\">Getting Started with Java: Essential Concepts and Techniques<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Basic Scanner Example<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example : Reading User Name and Age<\/strong><\/h3>\n\n\n\n<p>import java.util.Scanner;<\/p>\n\n\n\n<p>public class UserInput {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner scanner = new Scanner(System.in);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(&#8220;Enter your name: &#8220;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String name = scanner.nextLine();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(&#8220;Enter your age: &#8220;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int age = scanner.nextInt();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Hello &#8221; + name + &#8220;, you are &#8221; + age + &#8221; years old.&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanner.close();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Reading from Files with Scanner<\/strong><\/h2>\n\n\n\n<p>Scanner makes file reading incredibly simple.<\/p>\n\n\n\n<p>import java.util.Scanner;<\/p>\n\n\n\n<p>import java.io.File;<\/p>\n\n\n\n<p>import java.io.FileNotFoundException;<\/p>\n\n\n\n<p>public class FileReader {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File file = new File(&#8220;data.txt&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner scanner = new Scanner(file);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (scanner.hasNextLine()) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String line = scanner.nextLine();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(line);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanner.close();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (FileNotFoundException e) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;File not found: &#8221; + e.getMessage());<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Input Validation with Scanner<\/strong><\/h2>\n\n\n\n<p>Proper input validation prevents crashes and improves user experience.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example: Validating Integer Input with Range<\/strong><\/h3>\n\n\n\n<p>import java.util.Scanner;<\/p>\n\n\n\n<p>public class InputValidation {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner scanner = new Scanner(System.in);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int age = 0;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean validInput = false;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (!validInput) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(&#8220;Enter your age (1-120): &#8220;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (scanner.hasNextInt()) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;age = scanner.nextInt();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (age &gt;= 1 &amp;&amp; age &lt;= 120) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validInput = true;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Age must be between 1 and 120.&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Invalid input. Please enter a number.&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanner.next(); \/\/ Clear invalid input<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Your age is: &#8221; + age);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanner.close();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Using Custom Delimiters<\/strong><\/h2>\n\n\n\n<p>By default, Scanner uses whitespace as a delimiter. You can change this to parse data with custom separators.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example: Parsing CSV Data<\/strong><\/h3>\n\n\n\n<p>import java.util.Scanner;<\/p>\n\n\n\n<p>public class CSVParser {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String csvData = &#8220;John,25,Engineer\\nJane,30,Doctor&#8221;;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner scanner = new Scanner(csvData);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (scanner.hasNextLine()) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String line = scanner.nextLine();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner lineScanner = new Scanner(line);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lineScanner.useDelimiter(&#8220;,&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String name = lineScanner.next();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int age = lineScanner.nextInt();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String profession = lineScanner.next();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Name: &#8221; + name + &#8220;, Age: &#8221; + age + &#8220;, Profession: &#8221; + profession);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lineScanner.close();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanner.close();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<div style=\"background-color: #099f4e; border: 3px solid #110053; border-radius: 12px; padding: 18px 22px; color: #FFFFFF; font-size: 18px; font-family: Montserrat, Helvetica, sans-serif; line-height: 1.6; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); max-width: 750px;\">\n  <strong style=\"font-size: 22px; color: #FFFFFF;\">\ud83d\udca1 Did You Know?<\/strong> \n  <br \/><br \/> \n  The <strong style=\"color: #FFFFFF;\">Scanner class<\/strong> was not always part of <strong style=\"color: #FFFFFF;\">Java<\/strong>. Before its introduction in <strong style=\"color: #FFFFFF;\">Java 5 (2004)<\/strong>, developers had to read input using <strong style=\"color: #FFFFFF;\">BufferedReader<\/strong> wrapped around <strong style=\"color: #FFFFFF;\">InputStreamReader<\/strong>, often requiring multiple lines of code just to read a single line.\n  <br \/><br \/>\n  <strong style=\"color: #FFFFFF;\">Scanner<\/strong> simplified this to <strong style=\"color: #FFFFFF;\">a single line of code<\/strong>, making it one of the most <strong style=\"color: #FFFFFF;\">welcomed additions<\/strong> to the Java standard library at the time.\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Best Practices for Using Scanner<\/strong><\/h2>\n\n\n\n<ol>\n<li><strong>Always Close Scanner Resources<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Failing to close Scanner can lead to resource leaks, especially when reading from files.<\/p>\n\n\n\n<ol start=\"2\">\n<li><strong>Use Try-With-Resources<\/strong><\/li>\n<\/ol>\n\n\n\n<p>The safest way to ensure Scanner is closed properly.<\/p>\n\n\n\n<p>try (Scanner scanner = new Scanner(System.in)) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Use scanner<\/p>\n\n\n\n<p>} \/\/ Automatically closed<\/p>\n\n\n\n<ol start=\"3\">\n<li><strong>Validate Input Before Reading<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Always check if the expected input type is available before reading to prevent exceptions.<\/p>\n\n\n\n<ol start=\"4\">\n<li><strong>Handle the Newline Character Issue<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Remember to consume leftover newline characters when mixing nextInt() or nextDouble() with nextLine().<\/p>\n\n\n\n<ol start=\"5\">\n<li><strong>Don&#8217;t Create Multiple Scanners on System.in<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Creating multiple Scanner objects reading from System.in can cause conflicts. Reuse the same Scanner instance throughout your program.<\/p>\n\n\n\n<div style=\"background-color: #099f4e; border: 3px solid #110053; border-radius: 12px; padding: 18px 22px; color: #FFFFFF; font-size: 18px; font-family: Montserrat, Helvetica, sans-serif; line-height: 1.6; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); max-width: 750px;\">\n  <strong style=\"font-size: 22px; color: #FFFFFF;\">\ud83d\udca1 Did You Know?<\/strong> \n  <br \/><br \/> \n  The <strong style=\"color: #FFFFFF;\">Scanner class<\/strong> is <strong style=\"color: #FFFFFF;\">not thread-safe<\/strong>, meaning it should not be shared across multiple threads without proper <strong style=\"color: #FFFFFF;\">synchronization<\/strong>.\n  <br \/><br \/>\n  For thread-safe input handling, developers often use <strong style=\"color: #FFFFFF;\">BufferedReader<\/strong> combined with <strong style=\"color: #FFFFFF;\">synchronized blocks<\/strong> to ensure safe access in concurrent environments.\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Practical Real-World Example: Shopping Cart Calculator<\/strong><\/h2>\n\n\n\n<p>import java.util.Scanner;<\/p>\n\n\n\n<p>public class ShoppingCart {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner scanner = new Scanner(System.in);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double total = 0;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Shopping Cart Calculator&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Enter item prices (enter 0 to finish):\\n&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (true) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(&#8220;Enter price: $&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (scanner.hasNextDouble()) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double price = scanner.nextDouble();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (price == 0) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (price &gt; 0) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;total += price;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Item added. Current total: $&#8221; + total + &#8220;\\n&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Price must be positive.\\n&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#8220;Invalid input. Please enter a number.\\n&#8221;);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanner.next(); \/\/ Clear invalid input<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.printf(&#8220;\\nFinal Total: $%.2f%n&#8221;, total);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanner.close();<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>If you want to learn more about scanner in Java and its functionalities in the real world, then consider enrolling in HCL GUVI\u2019s<strong> <\/strong>Certified <a href=\"https:\/\/www.guvi.in\/zen-class\/data-science-course?utm_source=blog&amp;utm_medium=hyperlink&amp;utm_campaign=scanner-class-in-java-a-complete-guide-to-reading-user-input\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Data Science Course <\/strong><\/a>which not only gives you theoretical knowledge but also practical knowledge with the help of real-world projects.<strong>\u00a0<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>The Scanner class is an essential tool in every Java programmer&#8217;s toolkit. It transforms the complex task of reading and parsing input into simple, readable code that handles various data types effortlessly.<\/p>\n\n\n\n<p>Master the Scanner class, understand its quirks like the nextLine() issue, implement proper input validation, and always remember to close your resources. With these skills, you&#8217;ll build robust Java applications that interact smoothly with users and process data reliably.<\/p>\n\n\n\n<p>Whether you&#8217;re building a simple calculator, processing files, or creating an interactive application, Scanner gives you the power to handle input with confidence and clarity.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>FAQs<\/strong><\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1777540240308\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>1. What is the difference between next() and nextLine() in Scanner?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>next() reads a single word up to the next whitespace, while nextLine() reads the entire line including spaces until it encounters a newline character.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1777540245359\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>2. How do I fix the Scanner nextLine() issue after nextInt()?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Add an extra scanner.nextLine() call after nextInt() to consume the leftover newline character.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1777540254573\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>3. Is it safe to use Scanner for reading passwords?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. Scanner is not recommended for reading passwords. Use Console.readPassword() instead, which provides better security.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1777540268773\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>4. Why does my program throw InputMismatchException?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>InputMismatchException occurs when the input doesn&#8217;t match the expected data type. Always use hasNextInt() or similar methods to validate input before reading it.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1777540277004\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><strong>5. Can Scanner read from multiple sources simultaneously?<\/strong><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes, you can create multiple Scanner objects for different sources. However, avoid creating multiple Scanner instances for System.in as this can cause conflicts.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Reading user input is one of the first challenges every Java programmer faces. You want to create interactive programs that respond to what users type, but how do you actually capture that input? The Scanner class is Java&#8217;s built-in solution for reading input from various sources, including the keyboard, files, and strings. It&#8217;s simple, powerful, [&hellip;]<\/p>\n","protected":false},"author":63,"featured_media":109218,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[933],"tags":[],"views":"29","authorinfo":{"name":"Vishalini Devarajan","url":"https:\/\/www.guvi.in\/blog\/author\/vishalini\/"},"thumbnailURL":"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/scanner-class-300x115.webp","jetpack_featured_media_url":"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2026\/04\/scanner-class-scaled.webp","_links":{"self":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/108865"}],"collection":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/comments?post=108865"}],"version-history":[{"count":2,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/108865\/revisions"}],"predecessor-version":[{"id":109221,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/108865\/revisions\/109221"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media\/109218"}],"wp:attachment":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media?parent=108865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/categories?post=108865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/tags?post=108865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}