我试图在字符串中找到一个单词。但是,由于一段时间它无法识别一个单词。我试图删除标点符号,但它似乎没有效果。我在这里错过了什么吗?这是我正在使用的代码行: s.replaceAll(“([a-z] +)[?:!。,;] *”,“$ 1”);
String test = "This is a line about testing tests. Tests are used to examine stuff";
String key = "tests";
int counter = 0;
String[] testArray = test.toLowerCase().split(" ");
for(String s : testArray)
{
s.replaceAll("([a-z] +) [?:!.,;]*","$1");
System.out.println(s);
if(s.equals(key))
{
System.out.println(key + " FOUND");
counter++;
}
}
System.out.println(key + " has been found " + counter + " times.");
}
我设法通过使用 s = s.replaceAll(“\ W”,“”)找到解决方案(虽然可能不太理想);感谢大家对如何解决这个问题的指导。
答案 0 :(得分:1)
Strings
是不可变的。您需要将replaceAll
的结果分配给新的String
:
s = s.replaceAll("([a-z] +)*[?:!.,;]*", "$1");
^
此外,正则表达式要求在单词和标点符号之间存在空格。在tests.
的情况下,情况并非如此。您可以使用可选(零个或多个)字符调整正则表达式以解决此问题。
答案 1 :(得分:1)
您还可以在拆分操作中利用正则表达式。试试这个:
String[] testArray = test.toLowerCase().split("\\W+");
这将拆分为撇号,因此您可能需要使用特定的字符列表稍微调整一下。
答案 2 :(得分:0)
您的正则表达式似乎无法正常工作。 如果你想找到之后有一段时间的东西,那么这将有效
([a-z]*) [?(:!.,;)*]
它返回“测试”。当它在你给定的字符串上运行时。
另外
[?(:!.,;)*]
只是指出可以替换的标点符号。
但是我不确定你为什么不使用substring()函数。