1. 程式人生 > >【Java】在一個字串指定位置插入字串

【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);//檢測是否插入成功
    }
}

歡迎關注我的部落格和微信公眾號【幕橋社群】,謝謝~

這裡寫圖片描述