如何使用Java检查句子中是否存在单词?

use*_*197 33 java pattern-matching

我是编程和处理函数的新手,如果句子中出现一个单词,则返回true.我尝试了这种indexOf()方法,但后来我也遇到了这种方法的某个问题:

假设我的判决是 I am a, Java Programmer.

如果我们看一下这个词ram用的indexOf()方法,那么它将返回true因为ram存在Programmer而应该是正确的输出falseram不存在的词,但作为一种模式.

我该如何解决这个问题?我现在使用的代码是:

boolean isPresent(String word, String sentence)
{
    if(sentence.indexOf(word) >= 0)
        return true;
    else
        return false;
}
Run Code Online (Sandbox Code Playgroud)

注意:这个词ram只是一个例子来说明我当前的方法存在的问题之一.并不是我必须一直ram只能处理.这个词可以是任何类似的a,在上面的句子后面跟着一个逗号.

更新:感谢大家提供他们的意见和解决方案.我选择了一个作为一个被接受的答案(如果允许,会选择更多:-)),但很多都是有帮助的.

Evg*_*eev 39

尝试正则表达式

boolean contains = s.matches(".*\\bram\\b.*");
Run Code Online (Sandbox Code Playgroud)

\ b表示单词边界

  • +1使用单词边界(你可以扔掉`.*`) (4认同)
  • java中的@SalmanA,你必须保持`".*"`两端 (4认同)
  • IIRC,整个`s`必须与Java中给定的正则表达式匹配,因此必须保留`.*`. (2认同)

Zah*_*med 21

由于您要搜索单词,因此有三种情况:

  1. 句子开头的单词表示开始时没有空格但结尾处有空格.
  2. 两端句子空间之间的单词.
  3. 结尾处的字只有空格.

为了涵盖所有这三种情况,一种可能的解决方案是:

String str = "I am a JAVA programmer";
String[] splited = str.split("\\b+"); //split on word boundries
Arrays.asList(splited).contains("ram"); //search array for word
Run Code Online (Sandbox Code Playgroud)

这是工作演示


Rik*_*yay 10

题:

你怎么定义一个单词?

可能的答案:

由一些其他字符分隔的一堆字符.第二组字符由您选择的内容定义.假设你选择这些. ,?;.所以,如果你拆分这些字符(称为输入字符串分隔符),你会得到一串字符串这是.现在,要查找输入是否包含单词,请遍历这些字符串以检查它们是否与您的查询匹配.

码:

boolean isPresent(String query, String s) {    
    String [] deli = s.split("[.\\s,?;]+");

    for(int i=0;i<deli.length;i++)
        if(query.equals(deli[i]))
            return true;

    return false;    
}
Run Code Online (Sandbox Code Playgroud)

TL;博士:

如果你想要一个单词被定义为由字母,数字和下划线组成的任何单词,那么有一个正则表达式可供你使用:\W+.

String [] deli = s.split("\\W+");
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关Java Regex的更多信息,请考虑阅读本文.

  • 很好的答案,但请注意分裂接受正则表达式.所以你可以分开白色空间,或者不是alpha,或者其他什么.您也可以使用equalsIgnoreCase来匹配大写单词. (3认同)
  • 不会通过单词边界分裂也会返回单词序列之间?我有reather期望`s.split("\\ W +")`(虽然这可能会产生空字符串,不知道这些方法在java中是如何工作的) (2认同)

归档时间:

查看次数:

73283 次

最近记录:

8 年 前