2

我正在编写一个程序,它接受一个阅读器并解析来自该阅读器的输入。我不能使用 BufferedReader,但我想实现一个查看阅读器中当前字符的 peek 方法,而无需实际调用该字符的 read()。有没有比将其转换为字符数组或字符串并查看字符更简单/更好的方法?我很想使用 mark() 方法,但不幸的是,这只适用于缓冲阅读器。

4

2 回答 2

1

自然的解决方案是使用PushBackReader提供unread可用于实现的方法peek。(你可以计算出细节!)

但是否允许这样做并不完全清楚。这取决于您是被禁止使用BufferedReader还是“缓冲Reader”。在后一种情况下,PushBackReader可以说是缓冲的Reader.

如果您必须在不使用现有缓冲Reader类的情况下实现这一点,那么您应该如何处理这取决于需要多少前瞻:

  • 如果您只需要一个字符前瞻(例如,只是peek),那么您可以使用int表示前瞻和表示boolean当前是否有效的 a 来实现这一点。

  • 如果您需要多个字符前瞻,则需要一个数组(或列表),依此类推。


作为记录,mark()andreset()方法实际上在ReaderAPI 中。问题在于,并非所有Reader类都能够实现这些方法……由于底层流的限制……在操作系统级别。

于 2013-09-20T04:51:31.083 回答
0

您可以使用基于 java.io.PushBackReader 的 peek 方法编写自己的类。

于 2013-09-20T03:42:39.773 回答