如何循环遍历一个字符串,然后查找该字符串的一部分是否在 arrayList 中
How to loop through a string then find if a part of that string is in an arrayList
我想做的是通过字符串找到循环,然后将它们与 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
循环但不确定如何构造它。
您可以为此使用正则表达式:
patterntoSearch.stream()
.anyMatch(s -> text.matches(".*" + s + ".*"));
这个returns boolean
表示patterntoSearch
中的任何元素是否包含在text
中。
patterntoSearch.stream()
.filter(s -> text.matches(".*" + s + ".*"))
.collect(Collectors.toList());
这将 return patterntoSearch
中包含在 text
中的单词列表。如果你只想要一个,那么:
patterntoSearch.stream()
.filter(s -> text.matches(".*" + s + ".*"))
.findAny()
.orElse(null);
我已经默认通过null
,但您可以提供任何String
。
我想做的是通过字符串找到循环,然后将它们与 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
循环但不确定如何构造它。
您可以为此使用正则表达式:
patterntoSearch.stream()
.anyMatch(s -> text.matches(".*" + s + ".*"));
这个returns boolean
表示patterntoSearch
中的任何元素是否包含在text
中。
patterntoSearch.stream()
.filter(s -> text.matches(".*" + s + ".*"))
.collect(Collectors.toList());
这将 return patterntoSearch
中包含在 text
中的单词列表。如果你只想要一个,那么:
patterntoSearch.stream()
.filter(s -> text.matches(".*" + s + ".*"))
.findAny()
.orElse(null);
我已经默认通过null
,但您可以提供任何String
。