何时以及为何使用Scanner?

时间:2015-09-01 09:35:56

标签: java

我是Java新手,正在阅读处理输入和输出的不同方法。从我所读到的,各种策略归结为两件事,即

  1. 按字节读取/写入(FileInputStreamFileOutputStream)。
  2. 按字符阅读/写作(FileReaderFileWriter)。
  3. 但是Scanner在哪里适合图片?一个示例用例就是好的。

3 个答案:

答案 0 :(得分:3)

如果您想阅读令牌,请使用扫描仪

在阅读字符流时使用 FileReader

读取二进制文件时使用 FileInputReader

扫描仪:

  

扫描仪使用分隔符模式将其输入分解为标记,   默认情况下匹配空格。然后可以得到所产生的令牌   使用各种下一个转换为不同类型的值   方法。 Scanner - JavaDoc

对于Filereader和FileInputReader:

  

FileReader用于读取字符流。用于阅读   原始字节流,请考虑使用FileInputStream。 FileReader -javadoc

扫描仪示例:

String input = "1 fish 2 fish red fish blue fish";
   Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
   System.out.println(s.nextInt());
   System.out.println(s.nextInt());
   System.out.println(s.next());
   System.out.println(s.next());
 s.close(); 

答案 1 :(得分:1)

扫描程序是用于读取令牌输入的更高级别的类。

什么是令牌?对于类Scanner,令牌可以是原始值和一些特殊对象:

  • long(with nextLong)
  • int(with nextInt)
  • 短(使用nextShort)
  • byte(with nextByte)
  • 布尔值(使用nextBoolean)
  • BigDecimal(with nextBigDecimal)
  • float(with nextFloat)
  • double(with nextDouble)

此外,可以使用nextLine读取整行。

答案 2 :(得分:1)

Scanner类是java.util中的一个类,允许用户读取各种类型的值。有两个特别有用的构造函数:一个将InputStream对象作为参数,另一个将FileReader对象作为参数。

Scanner in = new Scanner(System.in);  // System.in is an InputStream
Scanner inFile = new Scanner(new FileReader("myFile"));// If the file ≥myFile≤ is not found, a FileNotFoundException is thrown. 

各种方法:

  • int nextInt():以int形式返回下一个标记。如果下一个标记不是整数,则抛出InputMismatchException。
  • long nextLong():返回下一个标记为long。如果下一个标记不是整数,则抛出InputMismatchException。
  • float nextFloat():以float形式返回下一个标记。如果下一个标记不是浮点数或超出范围,则抛出InputMismatchException。
  • double nextDouble():返回下一个标记为long。如果下一个标记不是浮点数或超出范围,则抛出InputMismatchException。
  • String next():查找并返回此扫描程序中的下一个完整标记,并将其作为字符串返回;令牌通常以空格结束,例如空格或换行符。如果不存在令牌,则抛出NoSuchElementException。
  • String nextLine():返回当前行的其余部分,不包括末尾的任何行分隔符。
  • void close():关闭扫描仪。

扫描仪在输入中查找令牌。令牌是一系列以Java调用空格结尾的字符。因此,如果我们读取具有由空格分隔的一系列数字的行,则扫描程序将每个数字作为单独的标记。