嗨,这是我的第一个问题,因此,如果由于某些原因不遵守规则,被证明是重复的或其他内容,请友好地告诉我(首先我不应该失去任何声誉)

无论如何,关于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/

10-10 13:37