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

Rob*_*icR 6 java regex unicode

假设我有以下代码:

String description = "?????  ? ? This description ??  ? ? ?  is a mess. ? ? ?????";
Run Code Online (Sandbox Code Playgroud)

我想删除非拉丁字符:?,?,?,?,?,??.

它变成了这个: This description is a mess.

我知道可能有很多类似于翼状的角色,所以不要指定我想删除的内容,我认为最好列出我想要保留的内容:基本拉丁语拉丁语1补充字符.

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

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

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

res*_*man 7

通过查看您提供的字符范围,似乎"Basic Latin"和"Latin-1 Supplements"相邻(0x00- 0x7F0x80- 0xFF).

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

String clean_description = description.replaceAll("[^\\x00-\\xFF]", "").trim();
Run Code Online (Sandbox Code Playgroud)

正如Quinn的评论所指出的,这并没有消除被删除部分之间的空间,因此结果有多余的空间(可能是也可能不是你想要的).如果你想删除那些空格,Quinn的正则表达式([^(\\x00-\\xFF)]+(?:$|\\s*)如果删除了注释)可能适合你.


Tho*_*mas 5

如果您想要更具描述性的表达式,请使用以下命令:

description.replaceAll( "[^\\p{InBasic_Latin}\\p{InLatin-1Supplement}]", "" );
Run Code Online (Sandbox Code Playgroud)

或否定的交集[\P{InBasic_Latin}&&\P{InLatin-1Supplement}](不是说它更易读;))