2014-01-16 6 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

Вы можете попробовать 'startWith' функцию' String' – 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) функцию, чтобы проверить строку, это начать с поиска текста, добавить поиск элемент в одном списке и преобразовать этот список в массив, возвращающий этот массив.

Для примера:

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 Лямбда:

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]); 
Смежные вопросы