我正在尝试编写一个简单的程序,它将搜索一个字符串数组并输出所有值,其中第一组字母以JTextfield中的内容开头
String[] words= {"apples", "applets", "ash", "bass", "banana", "cat", "chat", "coke"};
我想要的是当我的文本字段中没有包含所有单词时,如果“app”则只显示apple和applets。
答案 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