做爬蟲時,遇到各種字符串截取需求,總結一下。發現一個很強的方法,幾乎所有的字符串截取都能通過下面的這個方法配合其他的基本方法來解決。
獲取字符串中第N次出現的字符(或子字符串)位置
- 需要導入下面的兩個包
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public static int getCharacterPosition(String str,String target,int n){
Matcher slashMatcher = Pattern.compile(target).matcher(str);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
if(mIdx == n) // target第n次出現的位置
break;
}
return slashMatcher.start(); //返回值是target的位置
}
說明:str是源字符串,target是要查找的字符(串),n表示target第N次出現的位置。
- 這個方法彌補了charAt()不能查找字符串位置的不足,再配合subString(begindex,endIndex),indexOf(),length(),replace()等方法使用,幾乎能夠截取到所有你想要的子字符串。這里舉一個indexOf的例子
- eg:
String weburl = "http://abbs.oxfordjournals.org/content/44/2.toc";
String parturl = weburl.substring(0, weburl.indexOf("/content"));
System.out.println(parturl) ---> http://abbs.oxfordjournals.org
這個例子呢相對簡單一點,不需要用到getCharacterPosition()方法即可實現,如果是網頁的html源碼,那么僅僅是indexOf()就不能滿足需要了,這就是getCharacterPosition()方法的靈活之處了。
因篇幅原因,例子呢就不舉了, 有心的自己練好了,印象也更為深刻。
** 其實在數據庫sql語言中也有個類似的方法:(`PS:幾乎java中所有的字符截取問題都在數據庫方法中有所保留,同樣的,在數據庫中有的截取方法,也都能通過java的字符截取來實現`)**
- fuction
substring_index(str,delim,count)
declare: substring_index(被截取字段,關鍵字,關鍵字出現的次數) - eg:
select substring_index("blog.jb51.net.com",".",2)
as abstract from my_content_t
result:blog.jb51
footnote:如果關鍵字出現的次數是負數 如-2 則是從后倒數,到字符串結束