做爬虫时,遇到各种字符串截取需求,总结一下。发现一个很强的方法,几乎所有的字符串截取都能通过下面的这个方法配合其他的基本方法来解决。
获取字符串中第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 则是从后倒数,到字符串结束