删除标点符号问题

时间:2013-03-25 15:54:34

标签: java

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

3 个答案:

答案 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()函数。