- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在用 Java 编写一个程序(也已经用 C 编写了一个版本)。我真的需要在阅读后将一个字符放回输入流。这可以通过 C/C++ 中的 ungetc()
来完成,我想知道如何在 Java 中做同样的事情?
对于那些不了解 C/C++ 的人:char myc = (char)System.in.read();
我检查了 myc 的值,现在我想将 myc 放回 System.in
!所以当我再次调用 System.in
时,我得到了那个值。 (但是我该怎么做呢?)
注意:我正在寻找精确的技术。请不要建议我捕捉它或将其记录在其他地方并从那里阅读,因为我知道如何处理这些东西。如果有的话,我感兴趣的是等同于 Java 中的 ungetc()
。
干杯。
最佳答案
您正在寻找PushbackInputStream
Java 的 IO 库的设计原语是非常基本的,额外的功能是通过组合添加的。例如,如果你想缓冲来自文件的输入,你可以调用 new BufferedInputStream(new FileInputStream("myfile.txt"));
或者如果你想使用 UTF 从流中读取文本-8 编码你会调用 new InputStreamReader(new FileInputStream("myfile.txt"), "UTF-8");
因此,您要做的是使用 new PushbackInputStream(System.in);
这里需要注意的是,您实际上并没有将字节推回标准输入。一旦您从 System.in 中读取它就消失了,并且没有其他访问 System.in 的代码将能够获取该字节。您推回的任何内容都只能从您创建的用于处理数据的特定 PushbackInputStream 中获得。
关于java - 相当于java中的ungetc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2205308/
我使用以下代码将其输入到stdin“11+3”,并且 void main(void) { int number; printf("the first call : %d\n", sca
ungetc 只保证接受一个字节的回传。另一方面,我已经在 Windows 和 Linux 上对其进行了测试,它似乎可以使用两个字节。 是否有任何平台(例如任何当前的 Unix 系统)实际上只占用一个
我不明白这个程序是如何工作的? char c; int i; for(i=1;i<=5;i++) { scanf("%c",&c); printf("%c",c); un
我不明白这个程序是如何工作的? char c; int i; for(i=1;i<=5;i++) { scanf("%c",&c); printf("%c",c); un
假设我有一个由 fopencookie 创建的 FILE*,如果我在 FILE* 上调用 ungetc 会发生什么>?假设我在 FILE* 上设置了 setvbuf 作为 _IONBF 以使其无缓冲。
Python中的一些文件读取(readlines())函数 将文件内容复制到内存(作为列表) 我需要处理一个太大的文件 被复制到内存中,因此需要使用 一个文件指针(访问文件一个字节 一次)——就像在
在标准C库中,ungetc()不写入文件吗? 它只移动文件位置吗? 可以不事先阅读就使用吗?即它可以独立于其他 IO 函数使用吗? 是否可以在不需要一次一个字符的读取功能之后使用它,即一次读取多个字符
ungetc() 似乎在某些字符上失败。这是一个简单的测试程序: #include int main(void) { int c; printf("Type a letter and
是否有 ungetc 的 C++ 版本? 也就是说,我可以将角色放回 istream 吗? 最佳答案 是的。 istream::putback与 ungetc except if using unge
我想知道 std::cin::ungetc 接受多少个字符。它与 C 中的相同吗(因此可移植 1,见下文)? 相关 SO 帖子 "ungetc: number of bytes of pushback
int ungetc(int c, FILE *fp) 将字符 c 推回 fp,并返回 c 或 EOF 作为错误。 where as int putc(int c, FILE *fp) 将字符 c 写
我想在收到 SIGUSR1 时使用 ungetc 将一个“A”字符填回标准输入。想象一下,我有充分的理由这样做。 当调用 foo() 时,stdin 中的阻塞读取不会在收到信号时被 ungetc 调用
我猜想,在 scanf("%d") 之后 ungetc() 可能会失败,因为 scanf 可能会为第一个非数字字符隐式调用 ungetc()。 但如果格式以 %c 结尾,就不会发生这种情况,对吗? 最
我遇到过这样一个 getword 的例子。我了解所有检查等,但我对 ungetc 有疑问。 当c满足if ((!isalpha(c)) || c == EOF)且不满足while (isalnum (
我无法理解我的程序的行为。它调用 scanf,然后是 ungetc,然后是 printf。 我无法理解输出行为背后的原因。这是代码。如果有人澄清了行为,将会有很大的帮助。 int main() {
在我的代码中,我试图完成这样的事情(用伪代码编写): While not at EOF: Get line Write line to different file Skip
我是 C 初学者,我想连续调用 ungetc() 两次,尽管我知道在常规 C 中这是不允许的。有人告诉我可以修改 Fflush() 来完成这项工作,但我不知道该怎么做。 这是我的代码,我的Fflush
我在看一本关于linux编程的书时想到了,我在我的电脑上试了一下,代码运行良好,但我就是不明白它是如何工作的,希望有人能帮我解释一下, 提前致谢!我的代码如下: #include #include
谁能给我解释一下ungetch的用途?这是来自 K&R 第 4 章,您将在其中创建反向波兰计算器。 我在没有调用 ungetch 的情况下运行了该程序,在我的测试中它仍然可以正常工作。 int ge
我正在将 net-snmp 移植到一个嵌入式平台,该平台对文件系统的访问权限有限,但我偶然发现了一个大问题。有一部分核心代码使用了 ungetc() 函数,但我没有。当然有两种解决方案: A)使用我拥
我是一名优秀的程序员,十分优秀!