我试图写一个简单的程序,将搜索字符串并输出所有值字母首台什么是JTextField中如何使用通配符
String[] words= {"apples", "applets", "ash", "bass", "banana", "cat", "chat", "coke"};
开始阵列搜索字符串数组
我想要的是,当我的文本字段不包含任何所有的单词将出现,如果“应用程序”,那么只有苹果和小程序将被显示。
我试图写一个简单的程序,将搜索字符串并输出所有值字母首台什么是JTextField中如何使用通配符
String[] words= {"apples", "applets", "ash", "bass", "banana", "cat", "chat", "coke"};
开始阵列搜索字符串数组
我想要的是,当我的文本字段不包含任何所有的单词将出现,如果“应用程序”,那么只有苹果和小程序将被显示。
只是遍历字符串的评估每一个与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()]);
}
您需要遍历您的数组元素一个接一个,使用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()]);
}
如果搜索字符串的长度为零,比你返回原数组不反复的阵列。
尤其是对于大型阵列小更有效的解决办法是:
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()]);
}
这可以和简明的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]);
你有没有看着['字符串# contains'](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#contains%28java.lang.CharSequence%29)? – assylias
你可以试试'String'的'startsWith'函数 – Rehan
你看过'String#startsWith'吗? –