簡體   English   中英

如何在java中的字符串中過濾掉特定的字符(unicode like U+1F603)

[英]how to filter out specific char(unicode like U+1F603 ) in a string in java

我想用 java語言過濾掉一些像 U+1F603 這樣的 unicode 字符 它們是字符串中的各種信息,只過濾特定的字符。如何?有人可以幫忙嗎? 謝謝。

U + 1F603字符可以用Java編寫為\?\?

如果您在String yourString變量中有文本,則以下代碼應刪除出現的特殊字符。

yourString.replace("\uD83D\uDE03", "");

tl;博士

"happy😃".replaceAll( "😃" , "" ) 

快樂的

Java源代碼支持Unicode

您的 Java 源代碼可能包含 Unicode 中定義的超過 140,000 個字符中的任何一個。 因此,您可以使用任何此類字符獲得字符串文字。 沒有必要逃避。

在 Java 18 之前,您可能需要指示您的工具將源代碼文件保存為 UTF-8。 在 Java 18 及更高版本中,所有平台的默認字符編碼都是 UTF-8,根據JEP 400: UTF-8 by Default

你的目標,U+1F603,是😃😃

String result = input.replaceAll( "😃" , "" ) ;  // Replacing target character with empty string, effectively a "remove all" operation. 

例子:

System.out.println(
    "happy😃".replaceAll( "😃" , "" ) 
);

在 IdeOne.com 上查看此代碼的實時運行情況

快樂的

碼點

要在 Java 中處理單個字符,請使用代碼點整數。

Unicode 聯盟已為幾乎每種語言和腳本的每個已知字符分配了一個永久標識符號。 目前字符數超過140,000。 分配的數字范圍從零到剛超過一百萬。 顯然,該號碼范圍的大部分是未分配的,保留供私人使用或將來使用。

你想刪除😃 ,U+1F603,張開嘴的笑臉。

假設我們也想刪除:

  • 😦 , U+1F626, 張開嘴皺眉
  • 😷 , U+1F637, 戴醫用口罩

列出這些字符。

String forbidden = "😃😦😷";
List< Integer > forbiddenCodePoints = forbidden.codePoints().boxed().toList() ;

獲取分配給輸入流的每個字符的代碼點流。

String input = "happy 😃 sad 😦";
IntStream codePoints = input.codePoints();

過濾這些以消除在我們的禁止代碼點編號列表中找到的任何內容。 對於通過我們測試的代碼點int數字,將每個附加到StringBuilder 最后,從該StringBuilder構建一個String對象。

String result =
        codePoints
                .filter( codePoint -> ! forbiddenCodePoints.contains( codePoint ) )
                .collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append )
                .toString();

跑的時候。

result = happy  sad 

這是替代方案,對於IntStream#anyMatch ,使用IntStream#anyMatch

System.out.println(
        "happy 😃 sad 😦"
                .codePoints()
                .filter( codePoint -> ! "😃😦😷".codePoints().anyMatch(  x -> x == codePoint) )
                .collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append )
                .toString()
);

跑的時候。

happy  sad 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM