我们说我有以下代码:
String description = "★★★★★ ♫ ♬ This description ✔✔ ▬ █ ✖ is a mess. ♫ ♬ ★★★★★";
我想删除非拉丁字符:✔
,▬
,█
,✖
,♫
,{{1 }和♬
。
让它成为现实:★
我知道可能有很多像这些类似翼characters的角色,所以不要指明我想删除的内容,我认为最好列出我想保留的内容:{ {3}}和Basic Latin个字符。
我发现我可以使用以下代码删除除基本拉丁字符之外的所有内容
This description is a mess.
但有没有办法保留Latin-1补充字符?
答案 0 :(得分:7)
通过查看您提供的字符范围,“Basic Latin”和“Latin-1 Supplements”似乎相邻(0x00
- 0x7F
和0x80
- {{1 }})。
因此,您可以使用您提供的相同正则表达式,只需扩展为包含“Latin-1 Supplement”字符。这看起来像这样:
0xFF
正如Quinn的评论中指出的那样,这并没有消除被删除部分之间的空格,因此结果有多余的空格(可能是也可能不是你想要的)。如果你想删除那些空格,Quinn的正则表达式(String clean_description = description.replaceAll("[^\\x00-\\xFF]", "").trim();
,如果删除了注释)可能适合你。
答案 1 :(得分:3)
如果您想要更具描述性的表达,请使用:
description.replaceAll( "[^\\p{InBasic_Latin}\\p{InLatin-1Supplement}]", "" );
或否定[\P{InBasic_Latin}&&\P{InLatin-1Supplement}]
的交集(不是它更具可读性;)