在java中,数组有三个单词{'bad','bat','hat'}
。我必须编写一个函数,它将从数组中搜索字典。
示例:如果我在处搜索,则该函数将返回其中包含 的所有字词(例如bat
和hat
将会在输出中显示)如果我搜索单个字符,那么它将返回所有具有该字符的单词。 Java中是否有可用的内置函数?
例如:if (string.contains(item1) || string.contains(item2) || string.contains(item3))
答案 0 :(得分:3)
您可以流式传输数组,并使用String::contains
进行过滤。
String[] words = {"bad", "bat","hat"};
String filter = "at";
List<String> list = Stream.of(words)
.filter(word -> word.contains(filter))
.collect(Collectors.toList());
System.out.println(list);
答案 1 :(得分:0)
对于Java 8,streaming method将是首选,因为它可以使用多个处理器。对于早期版本的Java,可以使用以下方法。第一个使用contains
方法,第二个使用正则表达式,可能对您更有用。
import java.util.ArrayList;
import java.util.List;
public class SearchTest
{
public static void main(String[] args)
{
final String[] words = {"bad", "bat", "hat", "hate"};
final String filter = "at";
final String pattern = ".*at$"; // regex matching only strings that end with "at"
System.out.println(".contains");
final String[] results1 = SearchTest.search(filter, words);
for (String match : results1)
{
System.out.println(match);
}
// regex
System.out.println("Regular Expression");
final String[] results2 = SearchTest.match(pattern, words);
for (String match : results2)
{
System.out.println(match);
}
}
public static String[] search(final String substring, final String[] words)
{
final List<String> matches = new ArrayList<String>();
for (String word : words)
{
if (word.contains(substring))
{
matches.add(word);
}
}
return matches.toArray(new String[0]);
}
public static String[] match(final String regex, final String[] words)
{
final List<String> matches = new ArrayList<String>();
for (String word : words)
{
if (word.matches(regex))
{
matches.add(word);
}
}
return matches.toArray(new String[0]);
}
}