我在用我的程序完成一些事情时遇到了麻烦,我希望有人能够提供帮助。
我有一个包含 HTML 页面源代码的字符串。
我想做的是提取以下 HTML 的所有实例并将其放在一个数组中:
<img src="http://*" alt="*" style="max-width:460px;">
所以我会有一个 X 大小的数组,其中包含与上面类似的值,显然更新了 src 和 alt 属性。
这可能吗?我知道有 XML 解析器,但格式总是一样的。
任何帮助将不胜感激。
我建议使用ArrayList
而不是静态数组,因为看起来您不知道要匹配多少个匹配项。
对于 HTML 使用 REGEX 也不是一个好主意,但如果您确定标签始终使用相同的格式,那么我会推荐:
Pattern pattern = Pattern.compile(".*<img src=\"http://(.*)\" alt=\"(.*)\"\\s+sty.*>", Pattern.MULTILINE);
这是一个例子:
public static void main(String[] args) throws Exception {
String web;
String result = "";
for (int i = 0; i < 10; i++) {
web = "<img src=\"http://image" + i +".jpg\" alt=\"Title of Image " + i + "\" style=\"max-width:460px;\">";
result += web + "\n";
}
System.out.println(result);
Pattern pattern = Pattern.compile(".*<img src=\"http://(.*)\" alt=\"(.*)\"\\s+sty.*>", Pattern.MULTILINE);
List<String> imageSources = new ArrayList<String>();
List<String> imageTitles = new ArrayList<String>();
Matcher matcher = pattern.matcher(result);
while (matcher.find()) {
String imageSource = matcher.group(1);
String imageTitle = matcher.group(2);
imageSources.add(imageSource);
imageTitles.add(imageTitle);
}
for(int i = 0; i < imageSources.size(); i++) {
System.out.println("url: " + imageSources.get(i));
System.out.println("title: " + imageTitles.get(i));
}
}
}
当您获得ArrayIndexOutOfBoundsException
时,很可能该String
数组imageTitles
不足以容纳在正则表达式搜索中找到的所有 ALT 实例。在这种情况下,它很可能是一个大小为零的数组。