java - 如何在Java中删除字符串中Unicode杂项符号的Unicode十进制值

标签 java string unicode symbols

我正在努力删除或替换 Web 应用程序中文本区域字段中使用的字符串(Java 中)中的各种符号。发生的情况是,当我使用下面的内容时,内容将被转换为 unicode十进制表示值。

内容是: 字符串a = '最后搜索结果公告板 验证 ⛔ 0 ⚡ 1 ⚠ 6 ? 0'

当我将该内容保存在文本区域(即网页中)时,该符号将被保存为 ⛔,⚡,⚠。

我想删除 unicode 表示值(或)以正确的格式保存内容,以便我可以将正确的数据保存到数据库中。

如何从字符串中删除符号(“⛔”或“⚡”或“⚠”)的 unicode 表示值? 实际上我尝试用正则表达式来替换这些表示,如下所示 s.replaceAll("&#[9728 - 9983];", "").范围 [9728 - 9983] 表示杂项符号 unicode 十进制值范围。但它没有正确替换它。 我可以使用哪个正则表达式?或者可以使用哪种方法删除字符串中的值?

(或)

如何将 unicode 表示值('⛔' 或 '⚡' 或 '⚠')再次转换为字符串中的相同符号(⛔、⚡、⚠)?

最佳答案

我还没有在普通的 Java 中找到这样的实用程序。你只需要以“困难”的方式去做就可以了。

请注意,这不包括十六进制等效值(例如 ⛔)或长度不等于 4 的十进制值。

public static String htmlCharsDecode(String string) {
    int           length = string.length();
    StringBuilder out    = new StringBuilder(length);

    NumberFormat  parser = NumberFormat.getInstance();
    ParsePosition pos       = new ParsePosition(0);

    for (int i = 0; i < length; i++) {
        char c = string.charAt(i);

        if (c == '&' && i < length - 6 && string.charAt(i + 1) == '#' && string.charAt(i + 6) == ';') {
            String codepointString = string.substring(i + 2, i + 6);

            pos.setIndex(0);
            Number value = parser.parse(codepointString, pos);

            boolean isDecimal = pos.getIndex() == codepointString.length();
            if (isDecimal) {
                int codepoint = value.intValue();
                if (codepoint >= 9728 && codepoint <= 9999) {
                    out.append((char)codepoint);
                    i += 6;
                    continue;
                }
            }
        }

        out.append(c);
    }

    return out.toString();
}

您可以将 parserpos 设置为全局,以防止在每次调用时创建新对象,但要注意它们不是线程安全的。 (而且过早优化是不好的)

关于java - 如何在Java中删除字符串中Unicode杂项符号的Unicode十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58936956/

相关文章:

java - 使打印文本正确对齐

java - 每 20 次在新行中打印数组的值

Python 字符串先进先出

c++ - cout 可以更改 char 数组的内容吗?

Python:Unicode 和 "\xe2\x80\x99"让我抓狂

Java charAt 用于具有两个代码单元的字符

java - 如何将 JNDI 名称动态插入 Spring

java - 集群 Wildfly 抛出 java.lang.IllegalAccessError

string - Delphi-如何实现按整数排序的整数和字符串排序表?

python - scrapy:请求url必须是str或unicode得到列表