Подтвердить что ты не робот

Как проверить, присутствует ли слово в предложении с использованием Java?

Я новичок в программировании и работе над функцией, чтобы возвращать 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 только все время. Слово может быть любым, например say a, за которым следует запятая в приведенном выше предложении.

ОБНОВЛЕНИЕ: Спасибо всем за предоставление комментариев и решений. Я выбрал один из них как принятый ответ (выбрал бы больше, если разрешено:-)), но много было полезно.

4b9b3361

Ответ 1

попробуйте regex

boolean contains = s.matches(".*\\bram\\b.*");

\ b означает границу слова

Ответ 2

Поскольку вы хотите найти слово, есть три случая:

  • слово в начале предложения означает отсутствие пробела при запуске, но космос в конце.
  • слово между пространством предложения с обоих концов.
  • слово в конце только пробел в конце.

Чтобы охватить все три случая, одно из возможных решений:

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

Здесь работает демо

Ответ 3

Вопрос:

Как вы определяете слово?

Возможный ответ:

Букет символов, разделенных другими символами. Этот второй набор символов определяется тем, что вы выбираете. Предположим, вы выбрали их как . ,?;. Поэтому, если вы разделите строку ввода на эти символы (называемые разделители), вы получите кучу строки, которая является словами. Теперь, чтобы найти, содержит ли вход слово или нет, перебирайте эти строки, чтобы проверить, соответствуют ли они вашему запросу.

Код:

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.

Ответ 4

Взгляните на метод String.matches(). Если вы правильно построите правильное выражение, оно должно быть в состоянии делать то, что вы хотите. Хорошим местом для регулярных выражений были обучающие программы Java: http://docs.oracle.com/javase/tutorial/essential/regex/

Ответ 5

Если вы хотите совместить слово в предложении даже с пунктуацией, вам понадобится регулярное выражение:

  static boolean matchesWord(String toMatch, String matchIn) {
     return Pattern.matches(".*([^A-Za-z]|^)"+toMatch+"([^A-Za-z]|$).*", matchIn);
  }

(Вы можете использовать \W, но это не означает, что символы подчеркивания являются пунктуацией.)

Просто конкатенация пробелов в начало и конец не будет соответствовать, например, слову "программист" в строке "Я программист на Java", потому что в конце нет места. Он также не будет соответствовать словам непосредственно перед или после пунктуации.

Ответ 6

Попробуйте это решение

    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, это должно охватывать любые символы, такие как период запятой и т.д.

Ответ 7

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]);
            }

        }

Ответ 8

Более простой подход: если вы считаете, что слово что-то вроде

"Мой компьютер имеет RAM память" (между пробелами)

вы могли бы присоединиться к вашим функциональным пространствам indexOf до и после слова, которое вы ищете, например

if (sentence.indexOf( "+ word +" ") >= 0) {

Ответ 9

Это будет работать, если предположить, что каждое слово разделяется пробелом. Я добавил основную функцию для ясности. 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;
    }
}

Ответ 10

Это довольно неуклюжий обходной путь, но он должен достичь правильных результатов. Найдите подстроку, которую вы ищете внутри строки, и найдите charachters до и после вашей подстроки. Проверьте их, используя их значения ascii (int)substring.charAt(x);, чтобы увидеть, являются ли они буквами или нет. Если они оба являются eithr не буквами или выходят за пределы строки, вы знаете, что нашли слово. В противном случае вы знаете, что это просто часть слова.

Логика будет очень длинной - вот почему я не кодирую ее для вас, но дайте ей шанс и дайте мне знать, если вам нужно разъяснение.

Ответ 11

Hlo. Вы можете разделить предложение как массив, а затем положить в список. после этого вы можете использовать метод, чтобы проверить, присутствует ли ваше слово или нет. Пожалуйста, попробуйте этот код.

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;
}

}

Ответ 12

использовать содержит метод

boolean isPresent(String word, String sentence)
{
return sentence.contains(word);   
}

EDIT:   если вы хотите найти паритикулярное слово, вы можете добавить пробел и после словарной строки
  word =" "+ word +" ";