Java从字符串中删除非拉丁基本字符

标签 java regex unicode

假设我有以下代码:

String description = "★★★★★  ♫ ♬ This description ✔✔  ▬ █ ✖  is a mess. ♫ ♬ ★★★★★";

我想删除非拉丁字符:̶ , ,

让它变成这样:这个描述一团糟。

我知道可能有很多类似翅膀的字符,所以我认为最好列出我想保留的内容,而不是指定我想删除的内容:Basic LatinLatin-1 supplements字符。

我发现我可以使用下面的代码删除除基本拉丁字符以外的所有内容

String clean_description = description.replaceAll("[^\\x00-\\x7F]", "").trim();

但是有没有办法同时保留 Latin-1 补充字符?

最佳答案

从您提供的字符范围来看,“Basic Latin”和“Latin-1 Supplements”似乎是相邻的(0x00-0x7F 0x80-0xFF).

因此您可以使用您提供的相同正则表达式,只是扩展以包含“Latin-1 Supplement”字符。看起来像这样:

String clean_description = description.replaceAll("[^\\x00-\\xFF]", "").trim();

正如 Quinn 的评论中指出的那样, 这并没有消除删除部分之间的空格,因此结果有多余的空格(这可能是也可能不是你想要的)。如果您想要删除这些空格,Quinn 的正则表达式([^(\\x00-\\xFF)]+(?:$|\\s*),以防注释被删除)可能会起作用给你。

关于Java从字符串中删除非拉丁基本字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36038856/

相关文章:

java - 我如何使用 OkHttp 接收服务器响应发送的 cookie?

java - 试图列出来自内部 sdcard android 的所有文件夹/文件,但得到一个 null

java - 具有不区分大小写前缀的正则表达式

python - 在正则表达式模式的中间传递变量

将ucs(通用字符集)字符转换为unicode?

java - 为什么 Java 中的局部变量不被视为 "effectively final",即使之后没有任何修改?

java - 同步方法和同步对象的不同输出

JavaScript 正则表达式 : find non-numeric character

c++ - 如何使 QChar.unicode() 报告组合字符的 utf-16 表示形式?

javascript - 当字符串包含 unicode 字符时,不能总是成功使用 String.startsWith()