Lo que estoy tratando de hacer es encontrar bucle a través de una cadena a continuación, coincide con un ArrayList.
Por ejemplo, Tengo este código de trabajo:
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);
}
}
Sin embargo, lo que si puedo reemplazar String text = "Lebron James";
con String text = "Lebron James 2017-218 NBA Hoops Card";
? Es evidente que existe la cadena Lebron James
en esa cadena, pero se mezcló con otras palabras, así (que no me importa, y sólo se preocupan por la cadena Lebron James
. He pensado en un for
bucle pero no está seguro de cómo construirlo.
Puede utilizar expresiones regulares para ello:
patterntoSearch.stream()
.anyMatch(s -> text.matches(".*" + s + ".*"));
Esto devuelve boolean
que indican si cualquier elemento en patterntoSearch
está contenida en text
.
patterntoSearch.stream()
.filter(s -> text.matches(".*" + s + ".*"))
.collect(Collectors.toList());
Esto devolverá una lista de palabras patterntoSearch
, que están contenidos en text
. Si desea que sólo uno, entonces:
patterntoSearch.stream()
.filter(s -> text.matches(".*" + s + ".*"))
.findAny()
.orElse(null);
He pasado null
por defecto, pero se puede proporcionar ninguna String
.