我想将两个连接字符:\uD800\uDC00更改为x,但奇怪的是它给出了一个奇怪的字符,有人可以告诉我这里有什么问题吗?当我运行以下代码时:
System.out.println("uD800uDC00".replaceAll("([uD800-uDBFF]&&['uDC00'-'uDFFF'])", "x"));
我把这个角色当作一个输出
𐀀
首先,正则表达式中存在语法错误。模式中的"&&"不应该存在。同样,单引号和括号也不应存在。
上述语法更正是必需的,但还不够。 \uD800 是一个"魔术"字符。它与下一个字符组合形成一个 4 字节的 Unicode 码位:https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates
正则表达式是使用 Unicode 代码点而不是 Java 字符解释的。 \uD800\uDC00 是单个 Unicode 代码点 (0x10000),因此正则表达式不匹配。我想你可能想排除 16 位范围之外的所有 Unicode 码位 \u0000 - \uFFFF。所以这可能是你想要的:
System.out.println("uD800uDC00".replaceAll("[^u0000-uFFFF]", "x"));
此子字符串
([uD800-uDBFF]&&['uDC00'-'uDFFF'])
不出现在字符串中
uD800uDC00
所以"X"不会取代任何东西。