Java(Android)擷取字串間的字串(無BUG)及常見問題、技術分享
阿新 • • 發佈:2019-01-24
初次寫部落格還望各位大佬多多包含,本人是剛接觸Java不久的大白一枚(只是一個興趣者),分享一些遇到的問題解決方法和經驗。
(其中的不足及錯誤還望各位多多指教。)
Java(Android)擷取字串間的內容
大家有時可能遇到這樣子的問題,比如需要擷取"<p>你好</p>"直接的內容,但是安卓提供的java.lang.String.substring()方法並不能滿足各種需求,需要大家自己封裝一個,那麼問題就來了,首先,看看substring()的使用。
方法如下:
public String substring(int beginIndex, int endIndex)第一個int為開始的索引,對應String數字中的開始位置,還有介紹之外的一種方法:
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 "";
}
這樣子就解決了異常,就是因為這個問題困擾了梟燚一個下午,不知道啥子問題(沒看異常內容),然後突然來的靈感。