如何在一个句子中找到字符串数组?

时间:2016-05-21 16:29:26

标签: java arrays

场合

我有一个String数组。 String[] arr = {"name","name2"};

我想要什么?

我想知道java中是否有一个函数可以帮助返回true如果一个句子中有一个或两个单词.Java' s"包含"  方法允许只有字符串而不是数组。

3 个答案:

答案 0 :(得分:1)

好的,您可以尝试使用此代码,我已经使用了java.util的StringTokenizer类来解决这个问题。

查看代码:

public class StackOverFlowProblem {


public static void prn(String message){
    System.out.println(message);
}

public static void main(String[] args) {
    // TODO code application logic here
    String [] list = {"Hello","My","Friends","How","Are","You"};
    String sentence = "Hey Hello";
    if(searchWordinString(sentence, list))
        prn("exists");
    else
        prn("don't exists");
}

public static boolean searchWordinString(String sentence,String[] list){
    StringTokenizer test = new StringTokenizer(sentence);
    String element ="first iteration";
    while(!element.equals("")){
        try{
            element = test.nextElement().toString();
            prn(element);
            for(int index=0;index<list.length;index++){
                if(element.equals(list[index])){
                    prn(element+"="+list[index]);
                    return true;
                }
            }
        }
        catch(NoSuchElementException e){
            prn("Error: don't exist more words , bye");
            element="";
        }
    }
    return false;
}

}

我创建了一个带两个参数的函数,一个是句子,另一个是单词列表。

在函数内部,如果在单词匹配列表中找到任何项目,则该句子的单词将返回true,否则为false

答案 1 :(得分:1)

如果您的句子存储为字符串,则只需遍历数组并使用compare()检查每个单词:

private static boolean checkForWord(String sentence, String[] words) {
    for (int i=0; i<words.length; i++) {
        if (sentence.contains(words[i])) {
            return true;
        }
    }
    return false; //this statement can only be reached if there is no match
}

如果句子存储为String数组,那么您必须使用嵌套的for循环遍历两个数组,并使用equalsIgnoreCase()(或仅equals()比较单词,如果你想让它区分大小写:)

private static boolean checkForWord(String[] sentence, String[] words) {
    for (int x=0; x<sentence.length; x++) {
        for (int y=0; y<words.length; y++) {
            if (sentence[x].equalsIgnoreCase(words[y])) {
                return true;
            }
        }
     }
     return false;
}

答案 2 :(得分:0)

您可以将其转换为正则表达式,允许同时搜索两者,但也可以确保您只搜索那些确切的单词,而不是单词中的字符串,例如firstnamecontains()无法做到。

\b(?:name|name2)\b

作为Java字符串文字,您需要加倍\"\\b(?:name|name2)\\b"

如果您的单词列表是动态的,即您有一个任意数组的单词,而不是像这样的硬编码正则表达式,那么记住在构建正则表达式时引用这些单词:

StringJoiner joiner = new StringJoiner("|", "\\b(?:", ")\\b");
for (String word : words)
    joiner.add(Pattern.quote(word));
Pattern p = Pattern.compile(joiner.toString());
Matcher m = p.matcher(sentence);
if (m.find()) {
    System.out.println("Sentence contained word: " + m.group());
}

您甚至可以通过将if语句更改为while循环来继续搜索,以查找此类字词的所有实例。

您还可以将Pattern.CASE_INSENSITIVE选项添加到compile()来电,因此它也会与NameNAME匹配。