0

我试图在字符串中找到一个单词。但是,由于一段时间,它无法识别一个单词。我试图删除标点符号,但它似乎没有效果。我在这里错过了什么吗?这是我正在使用的代码行:s.replaceAll("([az] +) [?:!.,;]*","$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","") 找到了解决方案(尽管可能并不理想);感谢大家对如何解决这个问题的指导。

4

3 回答 3

1

Strings是不可变的。您需要将结果分配给replaceAll新的String

s = s.replaceAll("([a-z] +)*[?:!.,;]*", "$1");
                           ^

此外,您的正则表达式要求单词和标点符号之间存在空格。在 的情况下tests.,这是不正确的。您可以使用可选(零个或多个)字符调整正则表达式来解决此问题。

于 2013-03-25T15:55:09.027 回答
1

您还可以在拆分操作中利用正则表达式。尝试这个:

String[] testArray = test.toLowerCase().split("\\W+");

这将在撇号上拆分,因此您可能需要使用特定的字符列表对其进行一些调整。

于 2013-03-25T16:22:05.293 回答
0

您的正则表达式似乎无法按您的意愿工作。如果您想找到在那之后有一段时间的东西,那么这将起作用

([a-z]*) [?(:!.,;)*]

它返回“测试”。当它在您给定的字符串上运行时。

[?(:!.,;)*]

只需指出可以替换的标点符号。

但是我不确定你为什么不使用 substring() 函数。

于 2013-03-25T16:07:56.130 回答