Java数组搜索

时间:2018-01-03 14:53:00

标签: java arrays string search

在java中,数组有三个单词{'bad','bat','hat'}。我必须编写一个函数,它将从数组中搜索字典。

示例:如果我在处搜索,则该函数将返回其中包含 的所有字词(例如bathat将会在输出中显示)如果我搜索单个字符,那么它将返回所有具有该字符的单词。 Java中是否有可用的内置函数?

例如:if (string.contains(item1) || string.contains(item2) || string.contains(item3))

2 个答案:

答案 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]);
    }
}