快捷搜索: 王者荣耀 脱发

【Java】在一个字符串指定位置插入字符串

四、更新

更新时间: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);//检测是否插入成功
    }
}
经验分享 程序员 微信小程序 职场和发展