2014-01-16 122 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]);