找到没有正则表达式的整个单词

时间:2011-10-20 14:18:22

标签: java regex

我需要在一个句子中找到整个单词,但不使用正则表达式。所以如果我想在这句话中找到“the”这个词:“快速的棕色狐狸跳过懒狗”,我正在使用:

 String text = "the, quick brown fox jumps over the lazy dog";
 String keyword = "the";

 Matcher matcher = Pattern.compile("\\b"+keyword+"\\b").matcher(text);
 Boolean contains = matcher.find();

但如果我用过:

Boolean contains = text.contains(keyword);

并用空格填充关键字,它不会在句子中找到第一个“the”,因为它没有环绕空格和标点符号。

要明确的是,我正在构建一个Android应用程序,而且我得到了内存泄漏,这可能是因为我在ListView中使用了正则表达式,所以它正在执行正则表达式匹配X的次,取决于Listview中的项目。

6 个答案:

答案 0 :(得分:1)

如果您需要检查多个单词并执行没有正则表达式,则可以使用StringTokenizer并使用空格作为分隔符。

然后,您可以构建自定义搜索方法。否则,使用String.contains()String.indexOf()的其他解决方案符合条件。

答案 1 :(得分:1)

您所做的就是搜索"the"。然后,对于每个匹配,您将测试周围的字符是否为空格(或标点符号),或者匹配是否分别位于字符串的开头/结尾。

答案 2 :(得分:0)

将字符串拆分为空格,然后查看生成的数组是否包含您的单词。

答案 3 :(得分:0)

public int findWholeWorld(final String text, final String searchString) {
    return (" " + text + " ").indexOf(" " + searchString + " ");
}

这将为您提供第一次出现单词“the”的索引,如果单词“the”不存在,则为-1。

答案 4 :(得分:0)

简单地遍历字符并将它们存储在char缓冲区中。每当你看到一个空格时,将缓冲区清空为一个单词列表,然后继续,直到你到达终点。

答案 5 :(得分:0)

在StringTokenizer.class的注释中:

StringTokenizer是一个保留的遗留类 兼容性原因虽然在新代码中不鼓励使用它。它是 建议任何寻求此功能的人都使用拆分 而是String的方法或java.util.regex包。

以下示例说明了String.split的方式 方法可用于将字符串分解为其基本标记:

String[] result = "this is a test".split("\\s");
for (int x=0; x<result.length; x++)
    System.out.println(result[x]);

打印以下输出:

this
is
a
test

迭代生成的字符串数组并测试相等性并保持计数。

for (String s : result)
{
 count++;
}

如果这是家庭作业,请告诉讲师阅读Java,时间已经改变。我记得在学校里有完全相同的愚蠢问题,没有什么能帮助你为现实世界做好准备。