在Scanner类和BufferedReader中找不到nextLine和readLine之间的任何区别[关闭]

问题描述 投票:0回答:1

nextLine
readLine
有什么区别?我知道
readLine
已被缓冲。这是否意味着它是可变的?如果它是可变的,那么可变意味着什么?我以为当我们使用
nextLine
时,在命令提示符中输入一些内容后,它会被记录下来,并且删除不起作用,但事实并非如此。我发现两者的工作原理相同。

我尝试了不同类型的程序,交替使用

readLine
nextLine
,但我似乎找不到任何变化。

java java.util.scanner
1个回答
1
投票

简而言之

使用

Scanner.nextLine()
进行基本控制台输入处理,使用
BufferedReader.readLine()
进行高级输入/输出操作或从文件中读取大型数据集。

差异

Scanner.nextLine()适合解析来自控制台的输入或分隔输入,自动移至下一行。

BufferedReader.readLine() 对于从文件或网络连接等输入流读取文本行非常有效,并对 I/O 错误进行详细的异常处理。

Scanner.nextLine()

来自官方文档:

使扫描仪前进到当前行并返回跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。 由于此方法继续搜索输入以查找行分隔符,因此如果不存在行分隔符,它可能会缓冲搜索要跳过的行的所有输入。

返回被跳过的行。

例外情况

  • NoSuchElementException
    :如果没有找到线路。
  • IllegalStateException
    :如果此扫描仪已关闭。

BufferedReader.readLine()

来自官方文档:

读取一行文本。一行被认为由任何一个换行符 (' '), 回车符 (' '),或回车后紧跟换行符。

返回包含行内容的

String
,不包括任何行终止字符,或者如果已到达流末尾则返回
null

例外情况

  • IOException
    :如果发生 I/O 错误。

主要差异

  1. 职位晋升

    • Scanner.nextLine()
      :将扫描仪移动到下一行,将位置设置在该行的开头。
    • BufferedReader.readLine()
      :读取到行终止符,并且不会根据流位置自动前进到下一行。
  2. 行终止符:

    • Scanner.nextLine()
      :返回没有行分隔符的当前行,并且可以缓冲输入以查找行分隔符。
    • BufferedReader.readLine()
      :返回没有行终止符的行(' ',' ', 或者 ' ').
  3. 异常处理:

    • Scanner.nextLine()
      :如果未找到线,则抛出
      NoSuchElementException
      ;如果扫描仪关闭,则抛出
      IllegalStateException
    • BufferedReader.readLine()
      :针对 I/O 错误抛出
      IOException
  4. 直播结束

    • Scanner.nextLine()
      :到达输入流末尾时未明确指定的行为,通常类似于
      NoSuchElementException
    • BufferedReader.readLine()
      :遇到流结尾时返回
      null

来源

© www.soinside.com 2019 - 2024. All rights reserved.