一:贪婪爬取与非贪婪爬取
贪婪爬取:简单来说就是在爬虫爬取数据的时候就是尽可能多的获取数据。
非贪婪爬取:与贪婪爬取相反,就是在爬取数据的时候尽可能少的获取数据。
在Java中,默认的就是贪婪爬取,如果在*或者+后面加上?就是非贪婪爬取。
二:举实例说明贪婪爬取与非贪婪爬取
先进行贪婪爬取
运行结果如下;
下面进行非贪婪爬取
可以看出第一个贪婪爬取爬取的数据较多,第二种非贪婪爬取爬取的数据较少。
所有代码如下:
public static void main(String[] args) {
/* C++,bcdddddddddddddd是一种静态类型的、编译式的、通用的、大小写敏感的、
不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。
*/
//利用上述字符串来介绍贪婪爬取与非贪婪爬取
//1.定义文本字符串即文本大串
String s = "C++,bcccccccccccbbbbbb是一种静态类型的、编译式的、通用的、大小写敏感的." +
"不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。" +
"C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。";
//先用默认的爬取方式
String regex1 = "bc*";
String regex2 = "bc*?";
//2.创建正则表达式的对象
Pattern p = Pattern.compile(regex1);
//3.获取文本匹配器的对象
Matcher m = p.matcher(s);
//4.通过循环遍历得到结果
while (m.find()) {
String result = m.group();
System.out.println(result);
}
}
三:切割字符串的方法
public String replaceAll(String regex,String newStr) 按照正则表达式的规则进行替换
public String[] split(Sting regex); 按照正则表达式的规则切割字符串
举例说明:
有一段字符串:落霞与孤鹜齐飞,秋水共长天一色dqwefqwfqwfwq12312王勃dqwefqwfqwfwq12312滕王阁序
现在有两个需求
需求1:把字符串中文字之间的字母以及数字替换为- 需求2:把字符串中的诗句和诗人名字及其诗题切割出来
1.先来完成需求1
打印结果如下:
2.完成需求2
打印结果如下
所有的代码如下,仅供参考:
public static void main(String[] args){
/*public String replaceAll(String regex,String newStr) 按照正则表达式的规则进行替换
public String[] split(Sting regex); 按照正则表达式的规则切割字符串 */
//有一段字符串:落霞与孤鹜齐飞,秋水共长天一色dqwefqwfqwfwq12312王勃dqwefqwfqwfwq12312滕王阁序
//现在有两个需求
//需求1:把字符串中文字之间的字母以及数字替换为-
//需求2:把字符串中的诗句和诗人名字及其诗题切割出来
//1.定义字符串
String s = "落霞与孤鹜齐飞,秋水共长天一色dqwefqwfqwfwq12312王勃dqwefqwfqwfwq12312滕王阁序";
//2.利用replaceAll的方法进行切割,完成需求1
String result = s.replaceAll("[\\w&&[^_]]+","-");
//3.打印结果
System.out.println(result);
//2.利用split方法进行切割,完成需求2
String[] arr = s.split("[\\w&&[^_]]+");
//3.循环遍历得到结果
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}