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.pswp.cn/web/74578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74578.shtml
英文地址,請注明出處:http://en.pswp.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;使得…