如何使用通配符搜索字符串数组

时间:2014-01-16 11:51:56

标签: java string search wildcard

我正在尝试编写一个简单的程序,它将搜索一个字符串数组并输出所有值,其中第一组字母以JTextfield中的内容开头

String[] words= {"apples", "applets", "ash", "bass", "banana", "cat", "chat", "coke"};

我想要的是当我的文本字段中没有包含所有单词时,如果“app”则只显示apple和applets。

4 个答案:

答案 0 :(得分:0)

只需遍历字符串,然后使用startsWith评估每个字符串:

private static String[] filterWords(String[] words, String prefix) {
    List<String> filtered = new LinkedList<String>();
    for (String word : words) {
        if (prefix == null || prefix.lenght() == 0 || word.startsWith(prefix)) {
            filtered.add(word);
        }
    }
    return filtered.toArray(new String[filtered.size()]);
}

答案 1 :(得分:0)

您需要逐个迭代数组元素,使用String.startsWith(prefixText)函数检查字符串是否以搜索文本开头,将搜索元素添加到一个List中并将该列表转换为数组返回该数组。

例如:

public String[] searchText(String[] strArray,String searchTxt)
{
    if(searchTxt == null || searchTxt.length()==0)
        return strArray;

    List<String> resultArray = new LinkedList<String>();
    for (String word : strArray) {
        if (word.startsWith(searchTxt)) {
            resultArray.add(word);
        }
    }
   return resultArray.toArray(new String[resultArray.size()]);
}  

如果搜索字符串的长度为零,则返回原始数组而不迭代数组。

答案 2 :(得分:0)

一个更有效的解决方案,特别是对于大型阵列,将是:

private static String[] filterWords(String[] words, String prefix) {
    List<String> filtered = new LinkedList<String>();


if (prefix == null || prefix.lenght() == 0){
    return words;
}
else{
    for (String word : words) {
         if(word.startsWith(prefix)) {
            filtered.add(word);
        }
    }
    return filtered.toArray(new String[filtered.size()]);
}

答案 3 :(得分:0)

这可以通过Java 8 Lambdas非常有效和简洁地完成:

SELECT c1.Color, c1.Value
FROM colors c1
INNER JOIN
(
    SELECT Color, MIN(VALUE) AS minValue
    FROM colors
    GROUP BY Color
) c2
    ON c1.Color = c2.Color AND c1.VALUE = c2.minValue