gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:13:59 27 4
gpt4 key购买 nike

我正在努力删除或替换 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com