Как l oop через строку, а затем найти, если часть этой строки находится в arrayList - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь найти l oop через строку, а затем сопоставить их с arrayList.

Скажем, у меня работает этот код:

import java.io.*;
import java.text.ParseException;
import java.util.*;

public class Test_Mark4 {
    public static ArrayList<String> patterntoSearch;
    public static void main(String[] args) throws IOException, ParseException {
        String text = "Lebron James";
        patterntoSearch = new ArrayList();
        patterntoSearch.add("Lebron James");
        patterntoSearch.add("Michael Jordan");
        patterntoSearch.add("Kobe Bryant");
        System.out.println(patterntoSearch);
        System.out.println(text);
        boolean valueContained = patterntoSearch.contains(text);
        System.out.println(valueContained);
    }
}

Однако Что, если я заменим String text = "Lebron James"; на String text = "Lebron James 2017-218 NBA Hoops Card";? Ясно, что в этой строке есть строка Lebron James, но она смешалась и с другими словами (что мне было бы все равно, и меня интересует только строка Lebron James. Я думал о for l oop но не знаете, как его построить.

1 Ответ

1 голос
/ 17 марта 2020

Для этого можно использовать регулярное выражение:

patterntoSearch.stream()
    .anyMatch(s -> text.matches(".*" + s + ".*"));

Возвращает boolean, указывая, содержится ли какой-либо элемент в patterntoSearch в text.

patterntoSearch.stream()
    .filter(s -> text.matches(".*" + s + ".*"))
    .collect(Collectors.toList());

Это вернет список слов в patterntoSearch, которые содержатся в text. Если вам нужен только один, то:

patterntoSearch.stream()
    .filter(s -> text.matches(".*" + s + ".*"))
    .findAny()
    .orElse(null);

Я прошел null по умолчанию, но вы можете указать любой String.

...