【问题标题】:How to reset In.read() after going through a loop != '\n'循环后如何重置 In.read() != '\n'
【发布时间】:2018-11-17 22:50:05
【问题描述】:

在将输入设置为在 while 循环中输入后,如何重置 char 文本中的输入。经过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();
            }

        }

【问题讨论】:

    标签: java char


    【解决方案1】:

    这取决于In是什么类型的流。

    • 如果是ByteArrayInputStream 或类似名称,您可以调用reset() 重置到之前的“标记”位置。对于ByteArrayInputStream,该位置默认为流的开头;见javadoc

    • 如果是FileInputStream,您可以使用markreset,尽管它可能取决于操作系统和流的创建方式。 (javadoc 没有说,一种或另一种。)

      在您的情况下,我怀疑您将从 FileInputStream 读取,该文件包装了一个不可可重绕的管道或设备文件。

    • 如果是 SocketInputStreammarkreset 不太可能工作。无法回退来自远程服务器的流。网络传输协议(和服​​务器)不支持这种东西。

    • 如果是BufferedInputStreammarkreset 可能会起作用,具体取决于缓冲区的大小。阅读javadoc,了解缓冲区大小与标记/重置的关系。


    那么你的解决方案是什么?

    • 标记/重置可能不适用于In

    • 您可以用足够大的缓冲区将In 包装在BufferedInputStream 中,尽管预测它需要多大是有问题的(至少在理论上!)

    • 最好的解决方案可能是更改您的代码,这样您就不需要重新读取输入。例如:

      • 将您读取的字符保存在一个数组中,
      • 使用BufferedReader::readLineScanner::nextLine 一次读取用户输入的一行。

    【讨论】:

    • 谢谢,但是没有其他方法只使用 In.read() 而不使用任何数组字符串或其他方法吗?如果我更改循环以使我的 while 循环出现在我的 for 循环之前怎么办。嗯..
    • 1) 我想我已经回答过了。 2)你没有提供足够的代码或描述让我理解你的意思 “如果我改变循环,以便我的 while 循环在我的 for 循环之前。” 问题(对我来说) 是你的代码对我来说没有多大意义。我无法弄清楚它实际上应该做什么。
    【解决方案2】:

    好的,我修好了。我只是将其更改为 while 循环位于 for 循环之前。 现在它可以在不重置任何东西的情况下工作。

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 1970-01-01
      • 2020-02-25
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      相关资源
      最近更新 更多