Java 21增強對Emoji表情符號的處理了

現一個 Java 21 中有意思的東西!

java.Lang.Character類中增加了用于確定字符是否為 Emoji 表情符號的 API,主要包含下面六個新的靜態方法:

public static boolean isEmoji(int codePoint) {return CharacterData.of(codePoint).isEmoji(codePoint);
}public static boolean isEmojiPresentation(int codePoint) {return CharacterData.of(codePoint).isEmojiPresentation(codePoint);
}public static boolean isEmojiModifier(int codePoint) {return CharacterData.of(codePoint).isEmojiModifier(codePoint);
}public static boolean isEmojiModifierBase(int codePoint) {return CharacterData.of(codePoint).isEmojiModifierBase(codePoint);
}public static boolean isEmojiComponent(int codePoint) {return CharacterData.of(codePoint).isEmojiComponent(codePoint);
}public static boolean isExtendedPictographic(int codePoint) {return CharacterData.of(codePoint).isExtendedPictographic(codePoint);
}

這些靜態方法通過接收字符的codePoint來判斷是否為表情符號來返回boolean值。

所以,我們可以用isEmoji方法來判斷字符串中是否有表情,比如:

@Test
void testEmoji() {String message = "歡迎來到 www.didispace.com ??,要不要來杯 ?? ?";if(message.codePoints().anyMatch(Character::isEmoji)) {System.out.println("Message包含表情");}
}

除了判斷字符串中是否包含表情符號之外,還能用isEmojiModifierisEmojiModifierBase來判斷Emoji是否被修改和是否可以被修改:

@Test
void testEmoji2() {String welcomeMsg ="歡迎來到 www.didispace.com ??,要不要來杯 ?? ?";OptionalInt emojiOptional = welcomeMsg.codePoints().filter(Character::isEmoji).findFirst();if (emojiOptional.isPresent()) {int emojiCodePoint = emojiOptional.getAsInt();if (Character.isEmojiModifierBase(emojiCodePoint)) {System.out.println("Emoji can be modified");if (Character.isEmojiModifier(emojiCodePoint))System.out.println("Emoji is modified");elseSystem.out.println("Emoji has not been modified");} elseSystem.out.println("Emoji cannot be modified");} elseSystem.out.println("No emoji present");
}

使用正則表達式

這些新方法也可以通過屬性構造正則表達式來使用,比如:

String welcomeMsg = "歡迎來到 www.didispace.com ??,要不要來杯 ?? ?";Matcher matcher = Pattern.compile("\\p{IsEmoji}").matcher(welcomeMsg);if(matcher.find()) {System.out.println("Message contains an emoji!");
}matcher = Pattern.compile("\\p{IsEmoji_Modifier_Base}").matcher(welcomeMsg);if(matcher.find()) {System.out.println("Message contains an emoji modifier base!");
}

如果您學習過程中如遇困難?可以加入我們超高質量的技術交流群,參與交流與討論,更好的學習與進步!另外,不要走開,關注我!持續更新Java新特性專欄!

歡迎關注我的公眾號:程序猿DD。前沿技術早知道,彎道超車有希望!積累超車資本,從關注DD開始!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165441.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165441.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165441.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

操作系統 day13(RR、優先級調度)

RR(時間片輪轉) 響應時間:系統中有10個進程正在并發執行,如果時間片為1秒,則一個進程被響應可能需要等待9秒。也就是說,如果用戶在自己進程的時間片外通過鍵盤發出調試命令,可能需要等待9秒才能…

中斷方式的數據接收

中斷接收簡介 回顧之前的代碼 之前的代碼是 等待標志位RXNE位為1才有數據 進而讀取數據存放在變量c中 再根據c變量的數據是為0還是為1進而編寫燈亮滅的代碼 if語句 但這樣的代碼明顯不符合裸機多任務的編程模型 因為在while中為進程 進程執行的時間不能大于5ms 但是while&…

Qt/QML編程學習之心得:一個Qt工程的學習筆記(九)

1、.pro文件 加CONFIG += c++11,才可以使用Lamda表達式(一般用于connect的內嵌槽函數) 2、QWidget 這是Qt新增加的一個類,基類,窗口類,QMainWindow和QDialog都繼承與它。 3、Main函數 QApplication a應用程序對象,有且僅有一個 a.exec() 進行消息循環、阻塞 MyWi…

《圖解Java數據結構與算法:微課視頻版》簡介

本書系統、全面地介紹數據結構的基礎理論與算法設計,精選數據結構考研習題和各類典型例題進行講解,案例和課后習題豐富,突出對數據結構算法實踐能力的培養。本書算法均采用Java語言實現,示例代碼可直接上機運行。 本書配套資源豐…

Spring-jdbcTemplate-配置數據庫連接池,配置文件方式beans.xml

1、jdbc.properties jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql:///studb jdbc.userroot jdbc.pwd123456 2、beans.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans&…

Python BDD 框架比較之 pytest-bdd vs behave

pytest-bdd和behave是 Python 的兩個流行的 BDD 測試框架&#xff0c;兩者都可以用來編寫用戶故事和可執行的測試用例&#xff0c; 具體選擇哪一個則需要根據實際的項目狀況來看。 先簡單看一下兩者的功能&#xff1a; pytest-bdd 基于pytest測試框架&#xff0c;可以與pytest…

港口大型設備狀態監測及預測性維護策略

在現代港口運營中&#xff0c;大型設備的正常運行對于保障港口作業的高效性至關重要。為了實現設備的可靠性和持續性&#xff0c;港口管理者需要采取一系列狀態監測和預測性維護策略。 推進自動化和智能化是提高港口大型設備狀態監測和維護管理效率的重要途徑。通過應用先進的…

【計算機網絡筆記】數據鏈路層概述

系列文章目錄 什么是計算機網絡&#xff1f; 什么是網絡協議&#xff1f; 計算機網絡的結構 數據交換之電路交換 數據交換之報文交換和分組交換 分組交換 vs 電路交換 計算機網絡性能&#xff08;1&#xff09;——速率、帶寬、延遲 計算機網絡性能&#xff08;2&#xff09;…

讀像火箭科學家一樣思考筆記07_探月思維

1. 挑戰“不可能”的科學與企業 1.1. 互聯網 1.1.1. 和電網一樣具有革命性&#xff0c;一旦你插上電源&#xff0c;就能讓自己的生活充滿活力 1.1.2. 互聯網的接入可以幫助人們擺脫貧困&#xff0c;拯救生命 1.1.3. 互聯網還可以提供與天氣相關的信息 1.2. 用廉價、可靠的…

Windows如何截取屏幕圖片以及動態圖

在制作PPT或是其他演示文稿或是說明文檔的時候&#xff0c; 常常需要截取網頁或是屏幕的截圖&#xff0c;在Windows中有多種方式可以實現截取屏幕。 Windows 截取屏幕圖片的方式 在Windows 中截取屏幕中某個區塊的方式有&#xff1a; 方式1. 最原始的方式&#xff1a; 點擊 …

C練習題_2

一、單項選擇題(本大題共20小題,每小題2分,共40分。在每小題給出的四個備選項中選出一個正確的答案&#xff0c;并將所選項前的字母填寫在答題紙的相應位置上。&#xff09; 以下敘述中錯誤的是&#xff08;) A.對于double類型數組&#xff0c;不可以直接用數組名對數組進行整…

機器學習與藥物篩選的心得體會

機器學習在藥物設計里面的應用可以說還是比較常見的&#xff0c;尤其是搞計算的都會或多或少的涉及到這塊。比如國內做這塊比較多的&#xff0c;浙江大學的侯廷軍教授&#xff0c;北京化工大學的閆愛霞教授&#xff0c;華東理工大學的幾個做模擬計算的老師&#xff0c;上海藥物…

Unity機器學習 ML-Agents第一個例子

上一節我們安裝了機器學習mlagents的開發環境&#xff0c;本節我們創建第一個例子&#xff0c;了解什么是機器學習。 我們的例子很簡單&#xff0c;就是讓機器人自主移動到目標位置&#xff0c;不能移動到地板范圍外。 首先我們來簡單的了解以下機器學習的過程。 機器學習的過…

分布式鎖之基于zookeeper實現分布式鎖(三)

3. 基于zookeeper實現分布式鎖 實現分布式鎖目前有三種流行方案&#xff0c;分別為基于數據庫、Redis、Zookeeper的方案。這里主要介紹基于zk怎么實現分布式鎖。在實現分布式鎖之前&#xff0c;先回顧zookeeper的相關知識點 3.1. 知識點回顧 3.1.1. 安裝啟動 安裝&#xff1a…

『亞馬遜云科技產品測評』活動征文|搭建圖床chevereto

『亞馬遜云科技產品測評』活動征文&#xff5c;搭建圖床chevereto 提示&#xff1a;本篇文章授權活動官方亞馬遜云科技文章轉發、改寫權&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒體平臺&#xff0c;第三方開發者媒體等亞馬遜云科技官方渠道 文章目錄 『…

Python 獲取本地和廣域網 IP

Python 獲取本地IP &#xff0c;使用第三方庫&#xff0c;比如 netifaces import netifaces as nidef get_ip_address():try:# 獲取默認網絡接口&#xff08;通常是 eth0 或 en0&#xff09;default_interface ni.gateways()[default][ni.AF_INET][1]# 獲取指定網絡接口的IP地…

字符串相加

題意&#xff1a; 給定兩個字符串形式的非負整數 num1 和num2 &#xff0c;計算它們的和并同樣以字符串形式返回。 你不能使用任何內建的用于處理大整數的庫&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接將輸入的字符串轉換為整數形式。 示例 1&#xff…

利用STM32CubeMX解讀時鐘樹

1&#xff0c;低速時鐘 LSE是外部晶振作時鐘源&#xff0c;主要提供給實時時鐘模塊&#xff0c;所以一般采用32.768KHz。LSI是由內部RC振蕩器產生&#xff0c;也主要提供給實時時鐘模塊&#xff0c;頻率大約為40KHz。(LSE和LSI)只是提供給芯片中的RTC(實時時鐘)及IWDG(獨立看門…

【c++】棧教程

今天來講講棧 棧是什么&#xff1f; 老樣子&#xff0c;先來看一道題&#xff1a; 【棧】棧的基本操作 描述 棧的定義&#xff1a;棧是一種特殊的表這種表只在表頭進行插入和刪除操作。因此&#xff0c;表頭對于棧來說具有特殊的意義&#xff0c;稱為棧頂。相應地&#xff0…

佳易王羽毛球館計時計費軟件燈控系統安裝教程

佳易王羽毛球館計時計費軟件燈控系統安裝教程 佳易王羽毛球館計時計費軟件&#xff0c;點擊開始計時的時候&#xff0c;自動打開燈&#xff0c;結賬后自動關閉燈。 因為場館每一場地的燈功率都很大&#xff0c;需要加裝交流接觸器。這個由專業電工施工。 1、計時計費功能 &…