嗨,这是我的第一个问题,因此,如果由于某些原因不遵守规则,被证明是重复的或其他内容,请友好地告诉我(首先我不应该失去任何声誉)
无论如何,关于Java提供的此类StringReader,我实际上有2个问题。首先,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);
}
最佳答案
首先,StringReader.ready()的作用是什么?
一般约定是,如果下一次读取不会被阻止,则返回true。对于StringReader
总是如此。
我可以在while循环中将其用作条件,以便在字符串结束时终止循环吗?阅读Java文档并没有太大帮助(或者我可能误解了它们的含义,“如果保证下一个read()不会阻塞输入,则返回True”)
不。一个简单的测试就可以看出这一点。您应该循环播放,直到read()
返回-1。请注意,必须将read()
的结果存储到int
中,此功能才能起作用。
在我构造的while循环中,方法StringReader.read()以某种方式返回-1。
没有“以某种方式”。那就是应该做的。
这是什么意思?
这意味着流结束。在这种情况下,您已经从StringReader.
中读取了所有字符
同样,Java文档没有帮助。
反之。 Javadoc明确指出read()
返回“读取的字符,如果已到达流的末尾,则返回-1”。
我猜这意味着字符串已经终止
无需猜测。这就是Javadoc所说的。
但这意味着ready()方法没有执行应做的工作!
不,不是。 Javadoc并未说ready()
在流的末尾返回false
。您没有该声明的任何保证。在这种情况下,它返回true,您调用了read()
,它没有被阻止。合同满意。
关于java - Java StringReader ready(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23485668/