java - 循环后如何重置 In.read() != '\n'
问题描述
在将输入设置为在while循环中输入后,如何重置字符文本中的输入。经过while循环后,它应该从头开始。例如
char text = In.read();
假设我输入了asdf
while(text != '\n' ) {
text = In.read();
}
//here is text = enter
但我希望它再次来自 asdf 的“a”。
这是我到目前为止得到的
System.out.print("Please enter your text ");
char text = In.read();
// some other code here
//...
for (int i = 0; i < textcount.length ; i++)
{
j = 0;
while(text != '\n' )
{
int a = Character.getNumericValue(textcount[i]);
int b = Character.getNumericValue(text);
if(a == b)
{
j++;
charCounts[i] = j;
}
text = In.read();
}
}
解决方案
这取决于什么样的流In
。
如果是 a
ByteArrayInputStream
或类似的,您可以调用reset()
重置到之前的“标记”位置。对于 aByteArrayInputStream
,该位置默认为流的开头;请参阅javadoc。如果它是 a
FileInputStream
您可以使用mark
andreset
,尽管它可能取决于操作系统和流的创建方式。(javadoc没有说,一种或另一种。)在您的情况下,我怀疑您将从
FileInputStream
包装管道或不可倒带的设备文件中读取。如果它是
SocketInputStream
,mark
并且reset
不太可能工作。无法回退来自远程服务器的流。网络传输协议(和服务器)不支持那种东西。如果它是
BufferedInputStream
,mark
并且reset
可能会起作用,具体取决于缓冲区的大小。阅读javadoc以了解缓冲区大小和标记/重置之间的关系。
那么在您的情况下,解决方案是什么?
标记/重置可能无法正常工作
In
。您可以用足够大的缓冲区包装
In
aBufferedInputStream
,尽管预测它需要多大是有问题的(至少在理论上!)最好的解决方案可能是更改您的代码,这样您就不需要重新读取输入。例如:
- 将您读取的字符保存在数组中,
- 使用
BufferedReader::readLine
或 a 一次Scanner::nextLine
读取用户输入的一行。
推荐阅读
- python - 逐行条件计数保持所有列而不迭代数据帧
- java - spring boot 安全认证验证正文内容
- python - 拆分整数列表,使它们产生具有最小差异的子列表
- python - 子进程的生成器函数在父进程中运行
- php - 这个循环在服务器上不能正常工作?
- amazon-web-services - AWS IAM 政策问题
- swiftui - 使用几何阅读器使矩形居中
- raspberry-pi - .Net Web API 服务从 Raspberry Pi 4 读取传感器信息
- android - 向上导航无法返回首页 Fragment
- javascript - 使用 IIFE 函数时未捕获的类型错误