2014-01-16 124 views
1

我试图写一个简单的程序,将搜索字符串并输出所有值字母首台什么是JTextField中如何使用通配符

String[] words= {"apples", "applets", "ash", "bass", "banana", "cat", "chat", "coke"}; 
开始阵列搜索字符串数组

我想要的是,当我的文本字段不包含任何所有的单词将出现,如果“应用程序”,那么只有苹果和小程序将被显示。

+0

你有没有看着['字符串# contains'](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#contains%28java.lang.CharSequence%29)? – assylias

+0

你可以试试'String'的'startsWith'函数 – Rehan

+0

你看过'String#startsWith'吗? –

回答

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

如果搜索字符串的长度为零,比你返回原数组不反复的阵列。

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()]); 
} 
0

这可以和简明的Java 8非常高效地完成Lambda表达式:

String[] words = {"apples", "applets", "ash", "bass", "banana", "cat", "chat", "coke"}; 
    String searchText = "app"; //Coming from the TextArea 

    String[] results = Arrays.stream(words) 
      .filter(item -> item.startsWith(searchText)) 
      .toArray(size -> new String[size]);