最近遇上了富文本图片与资源服务器不匹配的问题,百度了一些文章,总结的几个方法。
1、使用正则表达是获取图片地址后,重新组合富文本的内容
public static List<String> getImgStr(String htmlStr) {List<String> list = new ArrayList<>();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()) {list.add(m.group(1));}}return list;}
2、使用jsoup 中的一个工具类
引入Jsoup
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.2</version>
</dependency>
public static String documentBody (String newsBody) {Element doc = Jsoup.parseBodyFragment(newsBody).body();Elements pngs = doc.select("img[src]");String httpHost = "http://192.168.0.100";for (Element element : pngs) {String imgUrl = element.attr("src");if (imgUrl.trim().startsWith("/")) { // 会去匹配我们富文本的图片的 src 的相对路径的首个字符,请注意一下imgUrl =httpHost + imgUrl;element.attr("src", imgUrl);}}return newsBody = doc.toString();}