как получить индекс для первого появления любого слова из массива в предложении - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу получить индекс слова из предложения.Но здесь я не хочу проверять одно конкретное слово.У меня есть список слов, и я хочу получить индекс первого вхождения любого слова из списка, который доступен в предложении.
Я хочу, чтобы индекс получил подстроку предложения, начиная с результирующего индекса.

String sentence = "hii rahul ,nice to meet you .How are you?";
ArrayList search = new ArrayList();
search.add("are");
search.add("rahul");
search.add("meet");
for(int i=0;i<search.size();i++)
{
  if (sentence.contains(search.get(i))) {
    System.out.println("I found the keyword");
  } else {
    System.out.println("not found");
  }

Я пытался написать некоторый код, но не смог понять, как получить индекс строки "rahul".

Ввод:
Предложение: hii rahul ,nice to meet you .How are you?
ArrayList искомых слов: ["meet","are","rahul"]

Ожидаемый результат: Индекс равен 4 (поскольку rahul стоит первым в предложении)

Ответы [ 5 ]

0 голосов
/ 15 февраля 2019

Возможно, вам нужно разбить строку на список слов.

Если вы просто используете contains или indexOf, это может дать неправильный ответ.Например ...

        String search = "Doctor Smith went gardening and then went to the cinema on Tuesday";
        List<String> words = Arrays.asList("then", "to", "went");

Это даст неправильный ответ, если использовать indexOf, потому что последовательность символов 'to' появляется внутри слова 'Doctor'.

Это соответствуетна целые слова (с учетом регистра) ...

import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;

public class FindWord {

    public static void main(String[] args) {
        String search = "Doctor Smith went gardening then went to the cinema on Tuesday";
        List<String> words = Arrays.asList("then", "to", "went");

        int index = 0;
        int result = -1;
        String match = null;

        StringTokenizer tokenizer = new StringTokenizer(search, " ", true);

        while(result < 0 && tokenizer.hasMoreElements()) {
            String next = tokenizer.nextToken();

            if(words.contains(next)) {
                result = index;
                match = next;
            } else {
                index += next.length();
            }
        }

        if(match == null) {
            System.out.println("Not found.");
        } else {
            System.out.println("Found '" + match + "' at index: " + result);
        }
    }
}
0 голосов
/ 15 февраля 2019
Matcher m = Pattern.compile("(meet|are|rahul)").matcher(searchText);
if (m.find()) {
    System.out.printf("Found '%s' at position %d%n",
        m.group(), m.start());
}

Если вы хотите начать со списка:

List<String> keywords = Arrays.asList("meet","are","rahul");
String pattern = keywords.stream().collect(Collectors.joining("|", "(", ")"));

Поиск по регулярному выражению выполняется медленнее, но можно добавить границы слов \\b(meet|are|rahul), чтобы «программное обеспечение» не было найдено.Или выполните поиск без учета регистра.

0 голосов
/ 15 февраля 2019

Вы можете использовать String.indexOf(String) для определения начальной позиции подстроки:

Integer lowestIndex = null;
for(String searchWord : search) {  
    int index = sentence.indexOf(searchWord);
    // update the result if the searchWord occurs at a lower position
    if (index >= 0 && (lowestIndex == null || lowestIndex > index)) {
            lowestIndex = index;
        }
    } 
}
if (lowestIndex == null) {
    System.out.println("None of the keywords were found");
}
else {
    System.out.printf("First keyword at %s%n", lowestIndex);
}
0 голосов
/ 15 февраля 2019

Возможно, что-то вроде этого:

int firstIndex = Integer.MAX_VALUE;
for(String word : search) {
  int foundIndex = sentence.indexOf(word);
  if(foundIndex != -1 && foundIndex < firstIndex){
    firstIndex = foundIndex;
  }
}

if(firstIndex != Integer.MAX_VALUE){
  System.out.println("Found index is: " + firstIndex);
} else{
  System.out.println("None of the words were found in the sentence.");
}

Если слово не найдено, .indexOf вернет -1.Если он найден, мы сохраняем самое низкое значение в переменной firstIndex.

Попробуйте онлайн.

0 голосов
/ 15 февраля 2019

Вы можете использовать метод String.indexOf .Но имейте в виду, что индексирование начинается с 0, поэтому в вашем примере вывод будет 4.

...