【问题标题】:Java Array Searching [closed]Java数组搜索[关闭]
【发布时间】:2018-06-13 06:28:31
【问题描述】:

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

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

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

【问题讨论】:

标签: java arrays string search


【解决方案1】:

您可以流式传输数组,并使用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);

【讨论】:

    【解决方案2】:

    对于 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]);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-18
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2012-08-29
      • 2019-08-31
      相关资源
      最近更新 更多