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

时间:2016-03-16 14:40:11

标签: java regex unicode

我们说我有以下代码:

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

我想删除非拉丁字符:,{{1 }和

让它成为现实:

我知道可能有很多像这些类似翼characters的角色,所以不要指明我想删除的内容,我认为最好列出我想保留的内容:{ {3}}和Basic Latin个字符。

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

This description is a mess.

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

2 个答案:

答案 0 :(得分:7)

通过查看您提供的字符范围,“Basic Latin”和“Latin-1 Supplements”似乎相邻(0x00 - 0x7F0x80 - {{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}]的交集(不是它更具可读性;)