四、更新
更新时间:2017年12月8日01:51:24
下面的方法有一个问题,是我刚才没有考虑到的问题,就是下面的方法只适用于一次操作,如果两次操作会有问题,什么问题呢,就是你第一次插入之后,Stringbuilder里面的index就被扰乱了啊,就像一个脑经急转弯:一个人不能空腹吃两个香蕉,因为他吃完第一根香蕉的时候,就不是空腹了;
这里涉及:
①插入后,新旧index冲突问题;
②使用集合,length()或者size()会被index冲破,强行被破坏;
五、策略
所以尝试了下,采取的解决策略是:
①先查出所有的含有目标的小字符串的index,放入List集合中;
②插入的时候,不能从前往后插,选择从后往前插,这样就不会耽误我从前往后数了,就像我想把GODBOK变成GOLDBOSK
这样,就要在原下标2前面加一个L,原下标5前面加一个S;
但是,如果我先在下标2前面insert插入了一个L,原来的下标顺序就会被打乱:
我本来想在2和4前面分别插入L和S的,如果顺序插,这样就不好弄了;如果从前往后数,数到最后一个标记的地方,先插入S,再往前走,这样,往前走的时候,遇到的还是旧的下标:
六、源代码
//正文
Element textMain = document.getElementById("contentDiv");
String textMainStr = document.getElementById("contentDiv").toString();
//获取图片src所在的位置,然后找到=号后面的index,插入basic Url
StringBuilder sb = new StringBuilder (textMainStr);//用来字符串操作
List<Integer> indexList = new ArrayList<>();//用来存放下标
//获取需要插入的下标,先记录,暂不处理;
for (int i=0;i<textMainStr.length();i++){
Integer index=textMainStr.indexOf("src",i);
if (-1!=index){
indexList.add(index);
i=index;
}
}
//如果有需要处理的,集中处理插入
if (indexList.size()>0) {
for (int j = indexList.size() - 1; j >= 0; j--) {
sb.insert(indexList.get(j) + 5, OtherSystemBingdingUrl.BASIC_URL);//这里的5是微调数出来的;
System.out.println(sb);
}
}
一、问题
最近一直在出差,所以博客断了这么多,愧疚愧疚;
最近需要解析一个页面,然后在手机端展示;因为手机端ionic有个非常牛逼的方法,叫:
<p [innerHtml]="newsDetail.textMain"></p>
就是,如果你的newsDetail对象中的textMain属性里存的是带格式的(带标签的)文本,ionic会自动帮你整理,装饰成带格式的页面,分段什么的都是小意思,非常省事;但是呢,如果,这里的内容里面有图片,就比较麻烦,一般我们网页端的图片的src写的都是访问地址的后半段,所以直接加载是加载不出来的;
二、方法
所以,我的思路是找到src后面的地址,然后插入前面的basic url;我拿到精确的正文的Element后,确定只有该图片有src这三个字符;
①先用indexOf获取src的下标;
②推测(就是数,第三声)出我要插的下标位置;
③插入网站的basic url,就是门户网站地址;
三、源代码
具体操作可以看我的截图,源代码附在下方,赶时间的朋友可以参考下:
public class TestInsertString {
public static void main(String[] args) {
String s= "<img border=\"0\" src=\"/ewebeditor/uploadfile/20171020084224496.jpg\"></p>";
int index = s.indexOf("src");//获取src下标,从而找到插入位置
System.out.println(index);//寻找插入位置
StringBuilder sb = new StringBuilder (s);//将String变成StringBuilder,字符串可编辑模式
sb.insert(21,"http://www.XXXXX.com");//插入
System.out.println(sb);//检测是否插入成功
}
}
欢迎关注我的博客和微信公众号【幕桥社区】,谢谢~