在字符串中搜索指定的单词

时间:2014-02-07 22:15:54

标签: java string contains

我想检查输入的特定单词是否在字符串中。我使用了以下代码:

import java.util.*;
import java.io.*;

public class StringTest {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String s1;
        s1 = s.next();
        String s2 = "this is an accomplishment";
        if (s2.contains(s1)) {
            System.out.println("you have done it");

        } else
            System.out.println("try another word");
    }
}

如果我输入“com”这个词,我会得到结果

  

你做到了

但“com”实际上只是“成就”一词的一部分。我想在这种情况下的结果是

  

尝试另一个词

因为s2不包含完整的单词“com”。我也试过了indexOf(),但也得到了相同的结果。我应该以什么方式进行?

3 个答案:

答案 0 :(得分:2)

最好的正则表达式方法可能是

Pattern p = Pattern.compile("\\b" + Pattern.quote(s1) + "\\b");
if (p.matcher(s2).find()) { ... }

它处理单词边界和转义。请注意,编译模式不是免费的。

答案 1 :(得分:1)

Read up on the API for String

特别注意contains()的作用。如果序列存在于String中,则匹配。它无法区分该String中的单独单词。只要'com'出现在该字符串中的任何位置,contains()就会返回true。你希望它只匹配整个单词,包含()不会。

如果给定的字符串出现在空格或标点符号的周围,则可以使用正则表达式进行匹配。在Regular Expressions上尝试Java教程。

或者,更简单地说,您可以沿着空格分开字符串。 String方法split()或另一个Scanner可以很容易地做到这一点。这将为您提供Scanner类称为“令牌”的单词,作为String类的实例。之后,改为使用contains(),使用equals()。正则表达式也可以这样做,但一开始学习它们会更加精疲力竭(但完全值得)。

答案 2 :(得分:0)

代替if(s2.contains(s1)),请使用以下代码:

if(Pattern.compile("\\b" + s1 + "\\b").matcher(s2).find())

确保import java.util.regex.Pattern;

它将在s2中搜索与s1匹配的整个字词。有关更多信息,请参阅以下页面:

或者,您可以使用

if(s2.matches(".*\\b" + s1 + "\\b.*"))