首页 > 解决方案 > 如何只在字符串中保留不同类型的字母,例如:拉丁字母、片假名、西里尔字母

问题描述

我想使用正则表达式从字符串中只提取字母。这些字母可以来自任何类型的字母。

我想获取文本并删除所有不是字母的符号(保留空格)。我厌倦了使用正则表达式删除一组符号,但是添加一路上发现的所有新类型的符号效率非常低。

标签: javaregex

解决方案


该功能Character.isAlphabetic(int codepoint)很可能是您正在寻找的。

如果Character.getType(int codepoint)返回给定 Unicode 代码点的字母类型,则返回 true。由于这是 Unicode,它可以与其他语言一起使用。例如,代码:

String str = "カタカナ 1234";
IntStream.range(0, str.length())
    .mapToObj(str::charAt)
    .filter(Character::isAlphabetic)
    .forEach(System.out::print);

给出输出:

????

由于我的控制台不知道如何打印非 ascii 符号,它会打印问号(注意输出中的 4 个符号对应于 4 个输入字母字符)。但是,将数据写入文件会正确显示符号。

请注意,您可能还希望为需要它的语言(大多数,但不是全部)包含空格,使用Character.isWhitespace(int codepoint).


推荐阅读