首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java正则混淆

Java正则混淆
EN

Stack Overflow用户
提问于 2010-07-28 19:49:46
回答 3查看 216关注 0票数 1

我讨厌问这样愚蠢的问题,但为什么我的代码不能实现我的预期呢?

主要方法中的Java代码:

代码语言:javascript
复制
String s = "\"The fat-dog [ruffus] @nd the stupid-cat [*mewzer*] don't like each other!\"";
String[] tokens = s.replaceAll("[\\x27]+", "").replaceAll("[^a-zA-z_\\x2D]+", " ").replaceAll("\\s+", " ").trim().split(" ");

System.out.println(s);
for (String t : tokens)
    System.out.println("Token: " + t);

这些指纹:

:“胖狗屁股”和愚蠢的猫猫不喜欢对方!

令牌:胖狗令牌: ruffus令牌: nd令牌:令牌:愚蠢的猫令牌:令牌: mewzer令牌:令牌:不令牌:类似令牌:每个令牌:其他令牌

这基本上是正确的,除了那些该死的托架!难道不应该用"[^a-zA-z_\\x2D]+"表达式替换它们吗?我甚至尝试添加一个replaceAll("\\[\\]"," "),然后添加一个replaceAll("\\x5B\\x5D"," "),但没有结果。

我怎样才能去掉这些括号呢?在我刚才提到的三项替换声明中,是什么使它们不被取代?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-28 19:59:50

你的第一次尝试没能成功因为这个

“replaceAll("^a-zA-z_\x2D+",

")

这一范围的字符恰好包括和西欧/北美组。[]^`_位于Z和a之间,这通常是编写A-z时的一种方便,但也是您的一个陷阱!

你可能是说A-Z

票数 2
EN

Stack Overflow用户

发布于 2010-07-28 19:54:14

这是:

代码语言:javascript
复制
replaceAll("\\[\\]"," ")

可能应该是:

代码语言:javascript
复制
replaceAll("(\\[|\\])"," ")

您试图将[]实例替换为a,而不是将[]替换为a。

票数 1
EN

Stack Overflow用户

发布于 2010-07-28 20:04:02

看起来有一个更好的方法来完成您真正想要做的事情(从字符串中删除所有非单词字符(除连字符外)):

代码语言:javascript
复制
String[] tokens = s.replaceAll("[^\\w\\s-]+", "").replaceAll("\\s+", " ").trim().split(" ");

不过,这将在字符串中保留数字。这有问题吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3356851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档