【发布时间】:2011-03-22 19:52:27
【问题描述】:
我正在尝试在 Java 中用一些标记将 HTML 中的单词包围起来。当调用 replaceAll 时,此代码会引发 ArrayIndexOutOfBoundsException。
Pattern pattern = Pattern.compile(wordToHighlight + "\\w{0,5}");
String replacement = "<span class='highlight'>$1</span>";
Matcher matcher = pattern.matcher(html);
if (matcher != null)
if (matcher.find())
retVal = matcher.replaceAll(replacement);
【问题讨论】:
-
此时
html包含什么? -
谁在乎?这是在任意 HTML 字符串中突出显示搜索文本的简单尝试。有无数种方法可能会出错,但在大多数情况下都会起作用。如果用户在搜索表达式中包含尖括号,他们可以享受有趣的效果。
-
仅供参考,您的代码中的
if (matcher != null)和if (matcher.find())都没有做任何有用的事情。如果代码到达那个点matcher不能是null(它会抛出一个异常),那么replaceAll()做的第一件事就是调用find()。如果返回false它只返回原始字符串。