【问题标题】:How to remove Miscellaneous Symbols Block from the Unicode String如何从 Unicode 字符串中删除杂项符号块
【发布时间】:2018-01-23 06:25:53
【问题描述】:

我想remove miscellaneous symbols block from Unicode string 使用正则表达式也可以尝试,但没有一个正则表达式我认为当前任何人都可以帮助我解决这个问题如何从字符串中删除杂项符号块。

Unicode 字符串

\u263A\uD83D\uDE0A\uD83D\uDE22)\uD83C\uDF82

代码:

String input = "\u263A\uD83D\uDE0A\uD83D\uDE22)\uD83C\uDF82";
input.replaceAll("[\u2600-\u26FF]|[\u2700-\u27BF]", "");

预期:

\uD83D\uDE0A\uD83D\uDE22)\uD83C\uDF82

但我无法解决这个问题。

【问题讨论】:

  • 提示:您可以将 Unicode 块与\p{InMiscellaneousSymbols}|\p{InDingbats}[\p{InMiscellaneousSymbols}\p{InDingbats}] 匹配。这更具可读性。

标签: java string unicode char emoji


【解决方案1】:

如果输入文本包含 u 转义字符,作为由反斜杠、“u”和 4 个十六进制数字组成的文本,请先将它们转换为真实的chars。

input = StringEscapeUtils.unescapeJava(Input); // From Apache commons
input = input.replaceAll("[\u2600-\u26FF]|[\u2700-\u27BF]", "");

【讨论】:

    【解决方案2】:

    它不起作用,因为在 Java 中 String is immutable 您必须像这样将结果分配给输入:

    String result = input.replaceAll("[\u2600-\u26FF]|[\u2700-\u27BF]", "");
    

    或者简单地说:

    input = input.replaceAll("[\u2600-\u26FF]|[\u2700-\u27BF]", "");
    

    所以如果你这样打印:

    System.out.println(input);
    System.out.println("\uD83D\uDE0A\uD83D\uDE22)\uD83C\uDF82");
    

    两者都给出:

    ??)?
    ??)?
    

    【讨论】:

    • 谢谢 YCF_L 你能试试这个字符串输入 = "\\u263A\\uD83D\\uDE0A\\uD83D\\uDE22\\uD83C\\uDF82";输入 = input.replaceAll("[\\u2600-\\u26FF]|[\\u2700-\\u27BF]", ""); System.out.println(输入);输出:
    • \u263A\uD83D\uDE0A\uD83D\uDE22\uD83C\uDF82
    • @KishanDonga 输出是正确的,因为您使用的是双反斜杠,而您只能使用带有 Unicode 字符串的一个,例如 String input = "\u263A\uD83D\uDE0A\uD83D\uDE22\uD83C\uDF82"; input = input.replaceAll("[\u2600-\u26FF]|[\u2700-\u27BF]", ""); System.out.println(input); 现在的输出是???
    猜你喜欢
    • 2020-03-15
    • 1970-01-01
    • 2020-03-28
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2014-08-29
    相关资源
    最近更新 更多