此问题在以下代码摘录中导致无限循环:

    public static final List<String> extractTags(String source, Integer nTags) {

    List<String> tags = new ArrayList<>();

    try (StringReader stringReader = new StringReader(source)) {
      String tag = "";
      char c;
      while ((c = (char) stringReader.read()) >= 0 && tags.size() < nTags) {
        switch (c) {
        case '<':
          tag = "";
          break;
        case '>':
          tags.add(tag);
          break;
        default:
          tag = tag + c;
          break;
        }
      }
    } catch (IOException e) {
    } finally {
      return tags;
    }
  }


如果使用以下参数调用:
来源=“垃圾箱”
nTags = 2

使用调试器,我意识到在字符串完全迭代之后,read()方法将永远返回char'\ uFFFF'65535。所以我的问题是为什么?

谢谢!

最佳答案

因为stringReader.read()返回-1作为流的结尾,但是您将其强制转换为char,这是Java中唯一的未签名数据类型。因此,您将获得-1而不是65535作为流的结尾,因此永不中断while循环。

您可能希望将读取的内容强制转换为循环内的char而不是while条件。

07-27 16:46