Java学习笔记------常用API(五)

爬虫

从网站中获取

java 复制代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class date {
    public static void main(String[] args) throws IOException {
        //创建一个URL对象,获取网址
        URL url=new URL("https://zhuanlan.zhihu.com/p/465034540");
        //细节,保持网络畅通
        URLConnection conn=url.openConnection();
        //创建一个对象去读取网络中的数据
        BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
        //获取正则表达式对象
        Pattern p=Pattern.compile("Java\\d{0,2}");
        //在读取时每次读一行
        String line;
        while((line=br.readLine())!=null){
            //文本适配器获取正则表达式规定文本
            Matcher m= p.matcher(line);
            while (m.find()){
                System.out.println(m.group());
            }
        }
        br.close();
    }
}

上述代码运行后即可获得Java?(?为空或数字)

带条件获取

只获取Java1和7,其他版本只要Java,可以这样写正则表达式"Java(?=1|7)"即可

java无视大小写可以这样写"((?i)Java)",

去掉1和7这样写"Java(?!1|7)"

只获取1和7,这样写"Java(?:1|7)"或者"Java(1|7)"

贪婪爬取

贪婪爬取:在爬取数据的时候尽可能多爬取数据

非贪婪爬取:在爬取数据的时候尽可能少爬取数据

例如:String str="abbbbbbbbb";

正则表达式为"ab+"会获取abbbbbbbbb

为"ab+?"则获取ab

正则表达式在字符串方法中使用

public String[] matches(String regex) //判断字符串是否满足正则表达式规则

public String replaceAll(String regex,String newStr) //按照正则表达式的规则进行替换

public String[] split(String regex) //按照正则表达式的规则切割字符串,数组接受

分组

正则表达式分组,每组是有组号的,也就是序号

规则:从一开始连续不间断,以左括号为基准,最左边为第一组,依次类推

(\组号):这一组内容和(\后面组号)的组内容相同

例如:(.+)(.+)(\\1) 即第三组与第一组一致

*:作用于某一组(写在后面),表示后面重复的内容出现0次或多次

例如:(.+)\\1*

java 复制代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static java.util.regex.Pattern.matches;

public class date {
    public static void main(String[] args) throws IOException {
        String s="(.+)(123)(\\1*)";
        System.out.println("aaa123aaaaaa". matches(s));//true

    }
}

捕获分组

正则内部使用:\\组号

正则外部使用:$组号

例如:String s="JJaaaaavvvvaaaa";

String str=s.reeplaceAll("(.)\\1+","$1");//str内容使Java

相关推荐
小皮侠23 分钟前
【算法篇】逐步理解动态规划模型6(回文串问题)
java·开发语言·算法·动态规划
勤奋的小王同学~25 分钟前
(javaSE)抽象类和接口:抽象类概念语法和特性, 抽象类的作用;接口的概念 接口特性 实现多个接口 接口间的继承 Object类
java·开发语言
Ai财富密码44 分钟前
【Linux教程】Linux 生存指南:掌握常用命令,避开致命误操作
java·服务器·前端
jz_ddk1 小时前
[学习] FIR多项滤波器的数学原理详解:从多相分解到高效实现(完整仿真代码)
学习·算法·matlab
LUCIAZZZ1 小时前
项目拓展-Jol分析本地对象or缓存的内存占用
java·开发语言·jvm·数据库·缓存·springboot
GalaxyPokemon1 小时前
LeetCode - 69. x 的平方根
java·数据结构·算法
在未来等你1 小时前
设计模式精讲 Day 1:单例模式(Singleton Pattern)
java·设计模式·面向对象·软件架构
heart000_12 小时前
基于 WebWorker 的 WebAssembly 图像处理吞吐量分析
java·图像处理·wasm
冷崖2 小时前
Redis事务与驱动的学习(一)
数据库·redis·学习
菜鸟阿达2 小时前
Idea 2025 commit 关闭侧边栏 开启探框
java·ide·intellij-idea