gpt4 book ai didi

Java StringReader 就绪()

转载 作者:行者123 更新时间:2023-11-29 05:23:54 28 4
gpt4 key购买 nike

嗨,这是我在这里的第一个问题,所以如果由于某种原因不遵守规则,结果是重复的或其他什么,请友好地告诉我(并不是说我首先会失去任何声誉)

无论如何,关于 Java 提供的此类 StringReader,我实际上有两个问题。首先,StringReader.ready() 究竟做了什么?我可以将它用作 while 循环中的条件,以便在字符串结束时循环终止吗?阅读 java 文档并没有太大帮助(或者我可能误解了“如果保证下一个 read() 不会阻塞输入则返回 True”的意思)

更新:

很抱歉,显然我错过了它说 read() 在字符串结束时返回 -1 的部分。无论如何,我的问题仍然是 ready() 部分。我认为这应该是检查字符串是否已结束的那个?

任何帮助将不胜感激,谢谢!

Link to the actual source code

导致问题的片段:

while (text.ready()) {

// Updating stringBuffer, using some sort of 'rolling hash' (or is
// it
// indeed rolling hash?)
stringBuffer.deleteCharAt(0);
stringBuffer.append((char) next);

// The next character that follows the sequence of k characters
next = text.read();

// store the string form of the buffer to avoid rebuilding the
// string for the next few checks
String key = stringBuffer.toString();

if (hashmap.containsKey(key)) {
// If the hash map already contain the key, retrieve the array
asciiArray = hashmap.get(key);
} else {
// Else, create a new one
asciiArray = new int[128];
}
System.out.println(next);

// Error checking on my side only, because some of the text sample I
// used contains some characters that is outside the 128 ASCII
// character, for whatever reason
if (next > 127) {
continue;
}

// Increment the appropriate character in the array
asciiArray[next]++;
// Put into the hash map
hashmap.put(key, asciiArray);

}

最佳答案

First, what exactly the StringReader.ready() do?

一般约定是,如果下一次读取不会阻塞,则返回 true。在 StringReader 的情况下始终为真。

Can I use it as a condition in a while loop so that the loop terminates when the string ends? Reading the java doc didn't help much (or maybe I misunderstood what they meant by "Returns True if the next read() is guaranteed not to block for input")

没有。一个简单的测试揭示了这一点。您应该循环直到 read() 返回 -1。请注意,您必须将 read() 的结果存储到 int 中才能正常工作。

In the while loop that I have constructed, the method StringReader.read() somehow returns -1.

没有“不知何故”。这就是它应该做的。

What does this mean?

表示流结束。在这种情况下,您已经从 StringReader.

中读取了所有字符

Again, the Java doc did not help.

恰恰相反。 Javadoc明确指出 read() 返回“读取的字符,如果已到达流的末尾则返回 -1”。

I am guessing that it means that the string has already terminated

无需猜测。这正是 Javadoc 所说的。

but then that means the ready() method is not doing what it is supposed to do!

不,它没有。 Javadoc 没有说 ready() 在流的末尾返回 false。您没有任何理由支持该声明。在这种情况下,它返回 true,您调用了 read(),并且它没有阻塞。契约(Contract)满意。

关于Java StringReader 就绪(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485668/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com