Scanner是Java中常用的一个类,主要用来接收用户从控制台输入的数据,或从文件中读取数据。Scanner具有很多实用功能,本文将对Scanner进行全面解析。
一、Scanner的创建和基础用法
在Java中创建Scanner,需要使用java.util包下的Scanner类。以下是Scanner的简单示例:
import java.util.Scanner; public class TestScanner { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); System.out.println("您输入的内容是:" + input); } }
在上面的例子中,我们首先导入了Scanner类,然后创建了一个Scanner对象。接下来使用Scanner的nextLine()方法来接收控制台输入的数据,并将其存储到一个字符串变量中,最后输出存储的字符串变量。
Scanner还提供了许多其他方法,它们允许我们以不同的方式读取输入数据,如next()、nextInt()、nextDouble()等等。您可以根据您的需要选择合适的方法。
二、Scanner的分隔符和定界符
使用Scanner读取输入时,默认情况下空格、制表符和换行符都被视为分隔符。不过,这些分隔符可能会与我们需要读取的数据一起输入,从而导致错误。Scanner提供了两种方法来处理这种情况:分隔符和定界符。
分隔符是Scanner将输入分解为单词的字符序列。默认的分隔符是空格、制表符和换行符,但您可以使用useDelimiter()方法来自定义分隔符。以下是一个示例:
import java.util.Scanner; public class TestScanner { public static void main(String[] args) { Scanner scanner = new Scanner("Java Python C++"); scanner.useDelimiter("\\s+"); while (scanner.hasNext()) { System.out.println(scanner.next()); } } }
在上面的代码片段中,我们创建了一个Scanner对象,并使用useDelimiter()方法将空格视为分隔符。此外,我们还使用了一个示例字符串作为输入,并使用了hasNext()和next()方法来逐个读取输入。运行该程序将输出以下内容:
Java Python C++
定界符是Scanner在读取输入时使用的字符序列之前和之后的字符。默认情况下,定界符为空(即只使用分隔符)。您可以使用useDelimiter()方法来指定定界符。以下是一个示例:
import java.util.Scanner; public class TestScanner { public static void main(String[] args) { Scanner scanner = new Scanner("name:Tom--age:18"); scanner.useDelimiter("--"); while (scanner.hasNext()) { System.out.println(scanner.next()); } } }
在上面的代码片段中,我们创建了一个Scanner对象,并使用useDelimiter()方法将"--"视为定界符。然后我们使用hasNext()和next()方法来逐个读取输入。运行该程序将输出以下内容:
name:Tom age:18
三、Scanner的错误处理
在读取输入时,可能会发生许多错误。比如,输入可能会超出了预期的范围,或者输入可能不符合所需的格式。Scanner提供了多种方法来处理这些错误,这里我们介绍一些常用的方法。
首先,Scanner提供了hasNextXxx()和nextXxx()方法,它们可以帮助我们检查输入是否符合所需格式,并读取符合格式的输入。例如,如果我们想读取一个整数,我们可以使用hasNextInt()和nextInt()方法。以下是一个示例:
import java.util.Scanner; public class TestScanner { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); while (!scanner.hasNextInt()) { System.out.println("输入错误,请重新输入:"); scanner.next(); } int input = scanner.nextInt(); System.out.println("您输入的整数是:" + input); } }
在上面的代码片段中,我们首先提示用户输入一个整数,然后使用hasNextInt()方法来确定用户是否输入了一个整数。如果没有,则提示用户重新输入。
其次,Scanner还提供了一些其他方法,如hasNextLine()、hasNextDouble()、hasNextBoolean()等等。它们的作用与hasNextInt()方法类似,可根据您的需求选择使用。
四、Scanner读取文件
除了读取控制台输入外,Scanner还可以读取文件。要读取文件,请在创建Scanner对象时将文件作为参数传递给Scanner构造函数。以下是一个示例:
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class TestScanner { public static void main(String[] args) { File file = new File("example.txt"); Scanner scanner = null; try { scanner = new Scanner(file); while (scanner.hasNext()) { System.out.println(scanner.nextLine()); } } catch (FileNotFoundException e) { System.out.println("文件不存在!"); } finally { scanner.close(); } } }
在上面的代码片段中,我们创建了一个File对象,并在创建Scanner对象时将其传递给Scanner构造函数。然后我们使用hasNext()和nextLine()方法逐行读取文件内容,并输出到控制台。请注意使用了try-catch语句来捕获FileNotFoundException异常,并使用finally语句来关闭Scanner对象。
五、Scanner的关闭
使用完Scanner后,应该使用其close()方法来关闭Scanner对象,以避免资源泄漏。在上面的示例代码中,我们已经看到了如何关闭Scanner,这里不再赘述。
Scanner是Java中非常实用的一个类,它可以方便地读取用户输入,或从文件中读取数据。通过本文的详细介绍,您应该已经掌握了Scanner的基本用法和一些高级特性。如果您需要进行输入操作的话,不要忘记使用Scanner!