4月7号总结

java学习

一.正则表达式

定义:正则表达式是一种用于描述字符串模式的表达式,通常被用于文本搜索、匹配和替换。它是一种强大的工具,可以在文本处理和文本分析中进行复杂的匹配和操作。

通过字符串引用里面的方法matches,然后执行匹配功能。

举例:

复制代码
 public static void main(String[] args) {
        String t="a";
        System.out.println(t.matches("[abc]"));
    }

上面代码表示,如果字符串t里面的元素之含[]里面有的,那么就返回真,反之返回假。

复制代码
 public static void main(String[] args) {
        String t="p";
        System.out.println(t.matches("[abc]"));
    }

注意:只能匹配单个字符。

复制代码
public static void main(String[] args) {
        String t="abc";
        System.out.println(t.matches("[abc]"));
    }

举例:

注意:这里虽然是一个反斜杠,但是我们在写代码时需要两个,这是一个规则。

复制代码
 public static void main(String[] args) {
        String t="2";
        System.out.println(t.matches("\\d"));
    }

2是数字,所以结果应该是真。

但是如果你使用了多字符还是会和上面一样,返回false,因为这个也是匹配单字符的。

举例:

复制代码
public static void main(String[] args) {
        String t="123";
        System.out.println(t.matches("[1-9]{3}"));
    }

上面是1到9之间的数字刚刚好出现三次。

所以应该返回真。

使用案例:

比如我们需要匹配一个qq好是否合理,我们知道qq号全部是由数字组成,并且第一个数字不能为0,长度在5到10之间。

那么我们就可以用这些信息来写一个匹配。

下面是完成的代码:

复制代码
public static void main(String[] args) {
        String t="12003000";
        System.out.println(t.matches("[1-9]\\d{5,10}"));
    }

表示第一个数字在1到9之间,后面全部是由数字组成,不包括第一个字符在内后面有4到9个数字,加起来就是限制在5到10个数字。

二.线段树练习题

Sample 1

Inputcopy Outputcopy
5 5 1 5 4 2 3 2 2 4 1 2 3 2 2 3 4 1 1 5 1 2 1 4 11 8 20

线段树的入门题,这里就不过多讲解。

AC代码:

复制代码
#include<iostream>
#include<cstdio>
#define MAXN 1000001
#define ll long long
using namespace std;
unsigned ll n,m,a[MAXN],ans[MAXN<<2],tag[MAXN<<2];
inline ll ls(ll x)
{
    return x<<1;
}
inline ll rs(ll x)
{
    return x<<1|1;
}
inline void push_up(ll p)
{
    ans[p]=ans[ls(p)]+ans[rs(p)];
}
void build(ll p,ll l,ll r)
{
    tag[p]=0;
    if(l==r){ans[p]=a[l];return ;}
    ll mid=(l+r)>>1;
    build(ls(p),l,mid);
    build(rs(p),mid+1,r);
    push_up(p);
} 
inline void f(ll p,ll l,ll r,ll k)
{
    tag[p]=tag[p]+k;
    ans[p]=ans[p]+k*(r-l+1);
}
inline void push_down(ll p,ll l,ll r)
{
    ll mid=(l+r)>>1;
    f(ls(p),l,mid,tag[p]);
    f(rs(p),mid+1,r,tag[p]);
    tag[p]=0;
}
inline void update(ll nl,ll nr,ll l,ll r,ll p,ll k)
{
    if(nl<=l&&r<=nr)
    {
        ans[p]+=k*(r-l+1);
        tag[p]+=k;
        return ;
    }
    push_down(p,l,r);
    ll mid=(l+r)>>1;
    if(nl<=mid)update(nl,nr,l,mid,ls(p),k);
    if(nr>mid) update(nl,nr,mid+1,r,rs(p),k);
    push_up(p);
}
ll query(ll q_x,ll q_y,ll l,ll r,ll p)
{
    ll res=0;
    if(q_x<=l&&r<=q_y)return ans[p];
    ll mid=(l+r)>>1;
    push_down(p,l,r);
    if(q_x<=mid)res+=query(q_x,q_y,l,mid,ls(p));
    if(q_y>mid) res+=query(q_x,q_y,mid+1,r,rs(p));
    return res;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++){
		cin>>a[i];
	}
    build(1,1,n);
    while(m--)
    {
        int k;
        cin>>k;
        switch(k)
        {
            case 1:{
            	ll l,r,w;
                scanf("%lld%lld%lld",&l,&r,&w);
                update(l,r,1,n,1,w);
                break;
            }
            case 2:{
            	ll l,r;
                scanf("%lld%lld",&l,&r);
                printf("%lld\n",query(l,r,1,n,1));
                break;
            }
        }
    }
    return 0;
}
相关推荐
九月十九40 分钟前
java使用aspose读取word里的图片
java·word
呆呆的小草1 小时前
Cesium距离测量、角度测量、面积测量
开发语言·前端·javascript
uyeonashi1 小时前
【QT系统相关】QT文件
开发语言·c++·qt·学习
一 乐2 小时前
民宿|基于java的民宿推荐系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·源码
爱记录的小磊2 小时前
java-selenium自动化快速入门
java·selenium·自动化
鹏码纵横2 小时前
已解决:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 异常的正确解决方法,亲测有效!!!
java·python·mysql
weixin_985432112 小时前
Spring Boot 中的 @ConditionalOnBean 注解详解
java·spring boot·后端
Mr Aokey2 小时前
Java UDP套接字编程:高效实时通信的实战应用与核心类解析
java·java-ee
冬天vs不冷2 小时前
Java分层开发必知:PO、BO、DTO、VO、POJO概念详解
java·开发语言