我讨厌问这样愚蠢的问题,但为什么我的代码不能实现我的预期呢?
主要方法中的Java代码:
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"," "),但没有结果。
我怎样才能去掉这些括号呢?在我刚才提到的三项替换声明中,是什么使它们不被取代?
发布于 2010-07-28 19:59:50
你的第一次尝试没能成功因为这个
“replaceAll("^a-zA-z_\x2D+",
")
这一范围的字符恰好包括和西欧/北美组。[]^`_位于Z和a之间,这通常是编写A-z时的一种方便,但也是您的一个陷阱!
你可能是说A-Z
发布于 2010-07-28 19:54:14
这是:
replaceAll("\\[\\]"," ")可能应该是:
replaceAll("(\\[|\\])"," ")您试图将[]实例替换为a,而不是将[或]替换为a。
发布于 2010-07-28 20:04:02
看起来有一个更好的方法来完成您真正想要做的事情(从字符串中删除所有非单词字符(除连字符外)):
String[] tokens = s.replaceAll("[^\\w\\s-]+", "").replaceAll("\\s+", " ").trim().split(" ");不过,这将在字符串中保留数字。这有问题吗?
https://stackoverflow.com/questions/3356851
复制相似问题