尝试从字符串中删除大量unicodes但在java中遇到regex问题。
示例文字:
\ u2605 StatTrak \ u2122暗影匕首
示例所需结果:
StatTrak Shadow Daggers
我当前的正则表达式代码不起作用:
list.replaceAll("\\\\u[0-9]+","");
代码将执行但文本不会被替换。通过查看其他解决方案,人们似乎只使用了两个" \\"但是小于4的任何东西都会引发我典型的错误:
线程中的异常" main" java.util.regex.PatternSyntaxException:索引2附近的非法Unicode转义序列 \ U [0-9] +
我在RegexPlanet和FreeFormatter等在线测试环境中尝试了当前的正则表达式解决方案,并且都给出了正确的结果。
任何帮助都将不胜感激。
答案 0 :(得分:1)
假设您想要替换"特殊字符串"清空String。我看到,\u2605
和\u2122
是POSIX
个字符类。这就是为什么我们可以尝试将这些可打印字符替换为""。然后,结果与您的期望相同。
样本将是:
list = list.replaceAll("\\P{Print}", "");
希望得到这个帮助。
答案 1 :(得分:1)
在Java中,像\u2605
这样的字符序列不是六个字符的字面序列,它代表一个unicode字符 - 因此你的模式"\\\\u[0-9]{4}"
将不匹配。
您的模式描述了一个文字字符\
,后跟字符u
,后跟正好四个数字字符0
到9
,但字符串中的内容是 unicode代码点2605中的单个字符,即“黑星”字符。
这与其他转义序列一样:在字符串"some\tmore"
中没有字符\
且没有字符t
...只有单个字符0x09,a 制表符 - 因为它是Java(和其他语言)已知的转义序列,它被表示的字符和文字\
{{所取代。 1}}不再是字符串中的字符。
Kenny Tai Huynh的答案,取代非printables,可能是最简单的方法,取决于你想要删除的东西,或者你可以列出你想要的字符(如果这是一个非常有限的集合)并删除这些的补充,例如t
答案 2 :(得分:0)
我以前的所作所为:
list.replaceAll("\\\\u[0-9]+","");
我需要的是什么:
list = list.replaceAll("\\\\u[0-9]+","");
现在结果正常,感谢您的帮助。