此问题在以下代码摘录中导致无限循环:
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条件。