获取富文本中的图片链接

本文介绍了一种从富文本中提取图片地址的方法,并提供了一个具体的Java实现案例。该方法使用正则表达式来匹配和抓取HTML代码中的图片源。

有时候做轮播图的时候需要从富文本中获取到图片地址,代码如下所示

/**
     * 得到网页中图片的地址
     */
    public static String getImgStr(String htmlStr) {
        Set<String> pics = new HashSet<>();
        String img = "";
        Pattern p_image;
        Matcher m_image;
        //     String regEx_img = "<img.*src=(.*?)[^>]*?>"; //图片链接地址
        String regEx_img = "<img.*src\\s*=\\s*(.*?)[^>]*?>";
        p_image = Pattern.compile
                (regEx_img, Pattern.CASE_INSENSITIVE);
        m_image = p_image.matcher(htmlStr);
        while (m_image.find()) {
            // 得到<img />数据
            img = m_image.group();
            // 匹配<img>中的src数据
            Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);
            while (m.find()) {
                pics.add(m.group(1));
            }
        }
        System.out.println(pics.size());
        return pics.size()>=1 ? pics.iterator().next():"";
    }

在Java中获取富文本中的图片链接通常涉及解析HTML或富文本内容,提取其中的`<img>`标签的`src`属性。以下是几种常见的方法: --- ### 方法一:使用正则表达式(适用于简单HTML) ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class ExtractImageLinks { public static void main(String[] args) { String richText = "<p>这是一段富文本</p><img src=\"https://example.com/image1.jpg\"/><img src=\"image2.png\"/>"; // 正则表达式匹配<img>标签的src属性 Pattern pattern = Pattern.compile("<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>"); Matcher matcher = pattern.matcher(richText); while (matcher.find()) { System.out.println("图片链接: " + matcher.group(1)); } } } ``` --- ### 方法二:使用Jsoup库(推荐,适用于复杂HTML) Jsoup是一个流行的HTML解析库,可以更可靠地处理复杂的HTML结构。 1. **添加依赖**(Maven): ```xml <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.16.1</version> </dependency> ``` 2. **代码示例**: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class ExtractImageLinks { public static void main(String[] args) { String richText = "<p>这是一段富文本</p><img src=\"https://example.com/image1.jpg\"/><img src=\"image2.png\"/>"; Document doc = Jsoup.parse(richText); Elements imgTags = doc.select("img[src]"); for (Element img : imgTags) { System.out.println("图片链接: " + img.attr("src")); } } } ``` --- ### 方法三:使用Java内置的HTML解析(如javax.swing.text.html.parser) 适用于简单的场景,但功能较弱: ```java import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.parser.ParserDelegator; import java.io.StringReader; import java.util.ArrayList; import java.util.List; public class ExtractImageLinks { public static void main(String[] args) throws Exception { String richText = "<p>这是一段富文本</p><img src=\"https://example.com/image1.jpg\"/><img src=\"image2.png\"/>"; List<String> links = new ArrayList<>(); new ParserDelegator().parse(new StringReader(richText), new HTMLEditorKit.ParserCallback() { @Override public void handleSimpleTag(javax.swing.text.html.HTML.Tag t, javax.swing.text.MutableAttributeSet a, int pos) { if (t == javax.swing.text.html.HTML.Tag.IMG) { links.add((String) a.getAttribute(javax.swing.text.html.HTML.Attribute.SRC)); } } }, true); links.forEach(System.out::println); } } ``` --- ### 注意事项 1. **正则表达式的局限性**:正则可能无法处理嵌套标签或格式异常的HTML。 2. **Jsoup的优势**:能正确处理不规范的HTML(如未闭合标签)。 3. **性能**:对于大量富文本,Jsoup的性能优于正则表达式。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值