Java中的正则表达式Lambda表达式

正则表达式&&Lambda表达式

正则表达式和Lambda表达式是Java编程中两个非常实用的特性。正则表达式用于字符串匹配与处理,而Lambda表达式则让函数式编程在Java中变得更加简洁。本文将介绍它们的基本用法,并结合示例代码帮助理解。同时要注意,正则表达式和Lambda并非是Java特有,很多语言都支持二者的使用

1. 正则表达式(Regular Expressions)

正则表达式(Regex)是一种强大的字符串匹配和处理工具,常用于:

  • 验证输入格式(如邮箱、电话号码)
  • 查找/替换文本
  • 字符串分割

1.1 基本语法

符号说明
\d匹配数字 [0-9]
\w匹配单词字符 [a-zA-Z0-9_]
\s匹配空白字符(空格、制表符等)
.匹配任意字符(除换行符)
*匹配前一个字符 0次或多次
+匹配前一个字符 1次或多次
?匹配前一个字符 0次或1次
{n}匹配前一个字符 恰好n次
^匹配字符串开头
$匹配字符串结尾

对于诸如\s\w类的字符类正则表达式,在敲程序时需要敲\\s \\w,这是因为,单个的\表示为一个转义字符,如\n \t等。因此需要\\来表示一个普通的\

1.2 Java中的正则表达式

Java通过 java.util.regex 包提供支持

在匹配正则表达式时,[]用于字符类,比如[abc]用来检测字符串对应位置特定字符串是否为a或b或c中的任一字符。没有方括号,只有"abc"则分别检测第一个字符是否为a第二个字符是否为b第三个字符是否为c,当然,[a]用来匹配单个字符也没有问题,只是有些冗余

示例1:匹配手机号
public class RegaxTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s = sc.nextLine();if(s.matches("1\\d{10}")){System.out.println("YES");}else{System.out.println("NO");}}
}
示例2:字符串分割

splitString类中的方法,主要用来拆分字符串

//按照给定的正则表达式拆分字符串
public String[] split(String regex)
// 按照给定的正则表达式拆分字符串,最多拆分出 limit 个元素
public String[] split(String s, int limit)//第一个参数s也可以是特殊字符如“,”, “.”
  • 示例
String text = "Java,Python,C++,JavaScript";
String[] languages = text.split(","); // 按逗号分割
System.out.println(Arrays.toString(languages));
  • 输出
[Java, Python, C++, JavaScript]

2. Lambda表达式(Java 8+)

Lambda表达式是Java 8引入的函数式编程特性,用于简化匿名内部类的写法。本质上,Lambda表达式是对函数式接口(只有一个抽象方法的接口)的一种实现,下面的Comparator接口和Runnable接口都是函数式接口

2.1 Lambda基本语法

(参数) -> { 代码块 }
  • 如果只有一行代码,可以省略 {}return

    (a, b) -> a + b
    
  • 如果没有参数,用 ()

    () -> System.out.println("Hello")
    
  • 如果只有一个参数,可以省略()

    element -> System.out.ptintln("这个元素是" + element)
    

需要注意的是,Lambda表达式是一种匿名函数,它没有自己独立的类型,必须依赖于一个函数式接口来确定其类型和行为

2.2 Lambda常见用法

示例1:替代匿名内部类(Runnable)
//匿名内部类
new Thread(new Runnable() {@Overridepublic void run() {System.out.println("线程运行");}
}).start();// Lambda写法
new Thread(() -> System.out.println("线程运行")).start();
示例2:集合遍历(forEach)
List<String> list = Arrays.asList("Java", "Python", "C++");// 传统写法
for (String s : list) {System.out.println(s);
}// Lambda写法
list.forEach(s -> System.out.println(s));
示例3:排序(Comparator)
List<Integer> numbers = Arrays.asList(5, 3, 8, 1);// 匿名Comparator
numbers.sort(new Comparator<Integer>() {@Overridepublic int compare(Integer a, Integer b) {return a - b;}
});// Lambda写法
numbers.sort((a, b) -> a - b);System.out.println(numbers); // [1, 3, 5, 8]

3. 结合正则表达式和Lambda

我们可以用Lambda表达式优化正则匹配操作,例如过滤符合规则的字符串:

List<String> emails = Arrays.asList("test@example.com","invalid-email","user@domain.com"
);
// 使用Lambda过滤有效邮箱
List<String> validEmails = emails.stream().filter(email -> email.matches("^[\\w.-]+@[\\w.-]+\\.[a-z]{2,6}$")).collect(Collectors.toList());System.out.println(validEmails);

输出:

[test@example.com, user@domain.com]

总结

特性用途示例
正则表达式字符串匹配、验证、分割"\\d+".matches("123")
Lambda表达式简化匿名类、函数式编程(a, b) -> a + b

正则表达式适合字符串处理,而Lambda让代码更简洁,两者结合可以写出更高效的Java程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Talend API Tester

背景 工作中有时会需要调测http接口&#xff0c;postman无疑是最常用最流行的工具&#xff0c;但是有一个致命问题&#xff0c;必须要登录&#xff0c;而工作经常是私网环境&#xff0c;导致使用非常不方便。因此想找一个Windows系统上的轻量级、无需登录即可使用的http测试工…

leetcode数组-移除元素

题目 题目链接&#xff1a;https://leetcode.cn/problems/remove-element/ 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为…

什么是市盈率,通俗解释清楚

市盈率就是“股价和公司盈利能力”的一个比例关系&#xff0c;简单来说&#xff0c;就是你花多少钱买股票&#xff0c;要等多少年才能通过公司赚的钱“回本”。 假设你买了一家公司的股票&#xff0c;花了100块钱&#xff0c;这家公司每年能赚10块钱。那市盈率就是100除以10&am…

突破传统认知:聚类算法的底层逻辑与高阶应用全景解析

一、维度革命&#xff1a;重新定义聚类分析的认知边界 在人工智能的浩瀚星空中&#xff0c;聚类算法犹如一组精密的星际导航仪&#xff0c;帮助我们在无序的数据宇宙中发现隐藏的秩序。这项起源于人类本能分类需求的技术&#xff0c;经历了从简单分组到智能识别的蜕变&#xf…

【愚公系列】《高效使用DeepSeek》051-产品创新研发

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…

网络编程—Socket套接字(UDP)

上篇文章&#xff1a; 网络编程—网络概念https://blog.csdn.net/sniper_fandc/article/details/146923380?fromshareblogdetail&sharetypeblogdetail&sharerId146923380&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 概念 2 Soc…

深度学习deeplearn1

import torch # 导入 PyTorch 库&#xff0c;PyTorch 是一个用于深度学习和张量计算的强大库x torch.arange(12) # 创建一个包含从 0 到 11 的整数的一维张量 x # torch.arange 函数用于生成一个指定范围的整数序列print(x) # 打印张量 x 的内容print(x.shape) # 打印张量 x 的…

无线通信技术(三):5G NR通信频带划分与应用场景

目录 一.5G NR频带划分概述 二.全球运营商5G频带分配对比 三.5G频带的应用场景 5G网络的发展离不开频谱资源的合理分配。不同的频段决定了5G的覆盖范围、传输速率和应用场景。本文将系统介绍5G NR频带划分,并结合实际应用场景,理解不同频段的特性及其适用环境。 …

观察者模式在Java单体服务中的运用

观察者模式主要用于当一个对象发生改变时&#xff0c;其关联的所有对象都会收到通知&#xff0c;属于事件驱动类型的设计模式&#xff0c;可以对事件进行监听和响应。下面简单介绍下它的使用&#xff1a; 1 定义事件 import org.springframework.context.ApplicationEvent;pu…

YOLO 获取 COCO 指标终极指南 | 从标签转换到 COCOAPI 评估 (训练/验证) 全覆盖【B 站教程详解】

✅ YOLO 轻松获取论文 COCO 指标&#xff1a;AP&#xff08;small&#xff0c;medium&#xff0c;large &#xff09;| 从标签转换到 COCOAPI 评估 (训练/验证) 全覆盖 文章目录 一、摘要二、为什么需要 COCO 指标评估 YOLO 模型&#xff1f;三、核心挑战与解决方案 (视频教程核…

[C/C++]文件输入输出

C style FILE * fileptr filename"C:\\file.txt" fopenfclosefprintfC style //指向std::ostream的指针 #include <iostream> #include <fstream>int main() {std::ostream* output &std::cout; // 默认指向控制台// 输出到控制台*output <&l…

【Android】界面布局-线性布局-例子

线性布局&#xff08;LinearLayout&#xff09;是一种重要的界面布局中&#xff0c;也是经常使用到的一种界面布局 • 在线性布局中&#xff0c;所有的子元素都按照垂直或水平的顺序在界面上排列 ➢如果垂直排列&#xff0c;则每行仅包含一个界面元素 ➢如果水平排列&…

HTML表单属性1

value 属性 value 设置输入字段的初始值&#xff08;默认值&#xff09;,提交表单时&#xff0c;如果用户未做修改&#xff0c;将发送value中的默认值 <form action"#">First name: <br><input type"text" name"firstname" val…

JavaScrip图标工具Chart.js之 气泡图

气泡图用于展示三个变量之间的关系。 气泡的位置由前两个变量决定&#xff0c;对应的是 X 轴和 Y 轴&#xff0c;第三个参数为气泡的大小。 {// X 轴对应值x: number,// Y 轴对应值y: number,// 气泡半径&#xff0c;单位为像素r: number } 泡图的 type 属性为 bubble &#xf…

Git 教程:从 0 到 1 全面指南 教程【全文三万字保姆级详细讲解】

目录 什么是 Git &#xff1f; Git 与 SVN 区别 Git 安装配置 Linux 平台上安装 Centos/RedHat 源码安装 Windows 平台上安装 使用 winget 工具 Mac 平台上安装 Git 配置 用户信息 文本编辑器 差异分析工具 查看配置信息 生成 SSH 密钥&#xff08;可选&#xf…

Java导出excel,表格插入pdf附件,以及实现过程中遇见的坑

1.不能使用XSSFWorkbook,必须使用HSSFWorkbook,否则导出excel后&#xff0c;不显示插入的图标和内容&#xff0c;如果是读取的已有的excel模板&#xff0c;必须保证excel的格式是xls&#xff0c;如果把xlsx通过重命名的方式改为xls&#xff0c;是不生效的&#xff0c;后面执行下…

国内外网络安全政策动态(2025年3月)

▶︎ 1.《关于进一步加强智能网联汽车产品准入、召回及软件在线升级管理的通知》发布 3月1日&#xff0c;工业和信息化部、市场监管总局联合发布《关于进一步加强智能网联汽车产品准入、召回及软件在线升级管理的通知》&#xff08;以下简称《通知》&#xff09;。 该通知旨在…

什么是缓存穿透、缓存雪崩、缓存击穿?

什么是缓存&#xff1f; 缓存就是数据交换的缓冲区&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高。 怎么防止缓存穿透&#xff1f; 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到…

深度学习在自动驾驶车辆车道检测中的应用

引言 自动驾驶技术是人工智能领域的一个前沿方向&#xff0c;而车道检测是实现自动驾驶的关键技术之一。通过识别和跟踪车道线&#xff0c;自动驾驶车辆能够保持在车道内行驶&#xff0c;提高行车安全。本文将详细介绍如何使用深度学习技术进行车道检测&#xff0c;并提供一个…

大模型如何引爆餐饮与电商行业变革

大模型如何引爆餐饮与电商行业变革&#xff1f; 一、时代背景&#xff1a;大模型重构产业逻辑的底层动力 1. 技术跃迁催生效率革命 2025年&#xff0c;大模型技术迎来"普惠临界点"。李开复在中关村论坛指出&#xff0c;大模型推理成本每年降低10倍&#xff0c;使得…