1. 程式人生 > >Java(Android)擷取字串間的字串(無BUG)及常見問題、技術分享

Java(Android)擷取字串間的字串(無BUG)及常見問題、技術分享

 初次寫部落格還望各位大佬多多包含,本人是剛接觸Java不久的大白一枚(只是一個興趣者),分享一些遇到的問題解決方法和經驗。

(其中的不足及錯誤還望各位多多指教。)

Java(Android)擷取字串間的內容

  大家有時可能遇到這樣子的問題,比如需要擷取"<p>你好</p>"直接的內容,但是安卓提供的java.lang.String.substring()方法並不能滿足各種需求,需要大家自己封裝一個,那麼問題就來了,首先,看看substring()的使用。

方法如下:

public String substring(int beginIndex, int endIndex)第一個int為開始的索引,對應String數字中的開始位置,
第二個是截止的索引位置,對應String中的結束位置1、取得的字串長度為:endIndex - beginIndex;2、從beginIndex開始取,到endIndex結束,從0開始數,其中不包括endIndex位置的字元

還有介紹之外的一種方法:

public String substring(int beginIndex)

該引數為開始的索引,對應String數字中的開始位置並且它是從beginIndex開始取,一直到末尾,也就是說是方法一的String.substring(beginIndex,String.lenth())

那麼我們由此也可以寫出一些擷取方法了:

1.從某一位置擷取到末尾

String afterString(String str,String start){
    if(str.contains(start)){
	return str.substring(str.indexOf(start)+start.length());
    }
    return "";
}

2.從開始擷取到某一位置

String beforeString(String str,String end){
    if(str.contains(end)){
        return str.substring(0,str.indexOf(end));
    }
    return "";
}

3.擷取字串之間

String betweenString(String str,String start,String end){
    if(str.contains(start) && str.contains(end)){
        return str.substring(str.indexOf(start)+start.length(),str.indexOf(end));
    }
    return "";
}

但是,這最後一個有個問題,如果這樣子用betweenString("1231456789","23","1");你可以發現會丟擲異常:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -3
at java.lang.String.substring(String.java:1967)
at test.Main.betweenString(Main.java:28)
at test.Main.main(Main.java:8)

顯示,超出字串範圍了,一看原來indexOf獲取的第一個"1"的位置,但是我們需要"23"後面的第一個"1"的位置,所以說我們需要改下:

String betweenString(String str,String start,String end){
    if(str.contains(start) && str.contains(end)){
        str = str.substring(str.indexOf(start)+start.length());
        return str.substring(0, str.indexOf(end));
    }
    return "";
}

這樣子就解決了異常,就是因為這個問題困擾了梟燚一個下午,不知道啥子問題(沒看異常內容),然後突然來的靈感。

好了,這是本人第一篇部落格如果內容有誤請聯絡我,也請進行糾正等內容,部分內容擷取自其他部落格(忘記網址了),侵權也請聯絡我,謝謝支援。