我是编程和处理函数的新手,如果句子中有单词,则返回true。我尝试了indexOf()
方法,但后来我也遇到了这种方法的某个问题:
假设我的句子是I am a, Java Programmer.
如果我们使用ram
方法查找单词indexOf()
,则会返回true
,因为ram
中存在Programmer
,而正确的输出应该false
为ram
,因为boolean isPresent(String word, String sentence)
{
if(sentence.indexOf(word) >= 0)
return true;
else
return false;
}
不是一个单词,而是一个模式。
我该如何解决这个问题?我现在使用的代码是:
ram
注意:单词ram
只是一个示例,用于显示我当前方法的一个问题。我不是必须只使用a
所有时间。这个词可以是任何类似的说{{1}},后面跟着一个逗号。
更新:感谢大家提供他们的意见和解决方案。我选择了一个作为接受的答案(如果允许,会选择更多:-)),但很多都是有帮助的。
答案 0 :(得分:39)
尝试正则表达式
boolean contains = s.matches(".*\\bram\\b.*");
\ b表示字边界
答案 1 :(得分:21)
由于您要搜索单词,因此有三种情况:
为了涵盖所有这三种情况,一种可能的解决方案是:
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
答案 2 :(得分:10)
你如何定义一个单词?
由一些其他字符分隔的一堆字符。第二组字符由您选择的内容定义。假设您选择这些. ,?;
。因此,如果您使用这些字符(称为delimiters)拆分输入字符串,您将获得一串单词的字符串。现在要查找输入是否包含单词,循环遍历这些字符串以检查它们是否与您的查询匹配。
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;
}
如果您希望将单词定义为包含字母,数字和下划线的任何内容,则可以为您准备一个正则表达式:\W+
。
String [] deli = s.split("\\W+");
如果您想了解有关Java Regex的更多信息,请考虑阅读this article。
答案 3 :(得分:2)
查看String.matches()
方法。如果你正确构造正则表达式,它应该能够做你想要的。开始使用正则表达式的好地方是Java教程:http://docs.oracle.com/javase/tutorial/essential/regex/
答案 4 :(得分:2)
如果你想匹配句子中的单词,即使是标点符号,你也需要这样的正则表达式:
static boolean matchesWord(String toMatch, String matchIn) {
return Pattern.matches(".*([^A-Za-z]|^)"+toMatch+"([^A-Za-z]|$).*", matchIn);
}
(您可以使用\ W,但不会将下划线视为标点符号。)
只是将空格连接到开头和结尾将不匹配,例如,字符串“我是Java程序员”中的“programmer”一词,因为最后没有空格。它也不会在标点符号之前或之后直接匹配单词。
答案 5 :(得分:1)
试试这个解决方案
int index = sent.indexOf(find);
if (index != -1) {
if (index == 0) {
System.out.println("true");
}
else if (index + find.length() == sent.length())
{
System.out.println("true");
}
else if (sent.charAt(index - 1) == ' ' && sent.charAt(find.length() + index) == ' ') {
System.out.println("true");
} else {
System.out.println("false");
}
} else {
System.out.println("false");
}
如果你想要的东西比你原来的问题更多,那么你应该检查它们是否在0-9和a-Z之间来检查空格,这应该涵盖任何字符,如逗号句号等。
答案 6 :(得分:1)
String s="I am a JAVA programmer";
String s1="JAVA";
String []p=s.split("\\s*(=>|,|\\s)\\s*");
for(int i=0;i<p.length;i++)
{
if(s1.equals(p[i]))
{
System.out.println(p[i]);
}
}
答案 7 :(得分:1)
更简单的方法是:如果你认为某个词就像
那样&#34;我的电脑有 ram 记忆&#34; (在空格之间)
你可以在你正在搜索的单词之前和之后连接到你的indexOf函数空间,就像这样
if(sentence.indexOf(&#34;&#34; + word +&#34;&#34;)&gt; = 0){
答案 8 :(得分:1)
这将起作用,假设每个单词用空格分隔。为了清晰起见,我添加了主要功能。如果单词不存在,find_str返回-1。否则,它返回单词相对于其他单词的位置。这里将返回2,这意味着第二个单词是'am'。
import java.util.*;
public class HelloWorld{
public static void main(String []args){
String str="I am a Java Programmer";
String str1="am";
int x=find_str(str,str1);
System.out.println(x);
}
public static int find_str(String main,String search) {
int i;
int found=-1;
String[] s=main.split(" ");
for(i=0;i<s.length;i++)
{
if(search.equals(s[i]))
found=i+1;
}
return found;
}
}
答案 9 :(得分:0)
这是一个相当笨拙的解决方法,但应该取得正确的结果。在字符串中找到您要查找的子字符串,并在子字符串之前和之后找到字符串。使用它们的ascii值(int)substring.charAt(x);
检查这些值,看它们是否是字母。如果它们都不是字母,或者超出字符串的范围,你就知道你找到了一个字。否则,你知道它只是一个单词的一部分。
逻辑将会很长 - 这就是为什么我不为你编码的原因,但是如果你需要澄清那么请试一试并告诉我。
答案 10 :(得分:0)
HLO。您可以将句子拆分为数组,然后将其放入List中。之后,您可以使用contains方法检查单词是否存在。请试试这个代码..
import java.util.ArrayList;
import java.util.Arrays;
public class karthitest {
public static void main(String[] args) {
String sentence = "I am Karthick";
String word = "I";
if(isWordExist(sentence, word)){
System.out.println("Word is exist");
}
}
public static boolean isWordExist(String sentence, String word){
boolean ans = Boolean.FALSE;
ArrayList<String> wordList = null;
try {
if(sentence != null && word != null){
wordList = new ArrayList<String>(Arrays.asList(sentence.split("[^a-zA-z]+")));
if(wordList.contains(word)){
ans = Boolean.TRUE;
}
}
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return ans;
}
}
答案 11 :(得分:-4)
使用包含方法
boolean isPresent(String word, String sentence)
{
return sentence.contains(word);
}
编辑:
如果你想搜索一个pariticular字,那么你可以添加空格befaore和字符串
后
word =“”+ word +“”;