我想從數組中過濾字符串。例如,我有五串從數組中過濾字符串
- adcfd
- adjnrj
- amlkc
- nfldkm
- cslkls
如果我想創建一個新的數組,包含過濾陣列,例如它與「廣告」,它會創建兩個元素的數組[adcfd,adjnrj]
開始,或者如果它開始「一」,我們會與三個元素的數組[adcfd,adjnrj,amlkc]
我腦海中唯一的事情就是比較所有字符串中的每個字符,直到我們得到兩個'trues',然後我們可以結束循環。
如果有任何我不知道的功能,我可以提出一些建議嗎?
我想從數組中過濾字符串。例如,我有五串從數組中過濾字符串
如果我想創建一個新的數組,包含過濾陣列,例如它與「廣告」,它會創建兩個元素的數組[adcfd,adjnrj]
開始,或者如果它開始「一」,我們會與三個元素的數組[adcfd,adjnrj,amlkc]
我腦海中唯一的事情就是比較所有字符串中的每個字符,直到我們得到兩個'trues',然後我們可以結束循環。
如果有任何我不知道的功能,我可以提出一些建議嗎?
您需要使用java中的String
類的startsWith方法。例如,
public static void main(String args[]) {
String Str = new String("Welcome to StackOverflow");
System.out.print("Return Value :");
System.out.println(Str.startsWith("Welcome"));
System.out.print("Return Value :");
System.out.println(Str.startsWith("StackOverflow"));
}
它打印:
Return Value :true
Return Value :false
編輯:以前我以爲OP會從我給出的例子嘗試我沒有給直截了當的答案OP的問題。由於其他人已經分享了他們的答案,我分享了一個簡單的代碼片段,它將提供OP所需的輸出。
String[] strings = {"adcfd", "adjnrj", "amlkc", "nfldkm", "cslkls"};
String prefix = "ad";
ArrayList<String> result = new ArrayList<>();
for (String str : strings) {
if (str.startsWith(prefix)) {
result.add(str);
}
}
System.out.println(result.toString());
它打印:
[adcfd, adjnrj]
我覺得你可以排序字符串第一,那麼你可以得到所有匹配的字符串沒有比較所有字符串元素。
替代代碼段:
public class Demo {
public List<String> test(String[] strs,String filter){
List<String> res = new LinkedList<>();
Arrays.sort(strs);
for(String str:strs){
if(str.startsWith(filter)){
res.add(str);
continue;
}
if(str.compareTo(filter)>0){
return res;
}
}
return res;
}
public static void main(String[] args){
String[] strs = {"adcfd","adjnrj","amlkc","nfldkm","cslkls"};
Demo demo = new Demo();
String filter = "a";
System.out.println(demo.test(strs, filter));
}
}
輸出:
[adcfd, adjnrj, amlkc]
有在Java中8
更簡單的方法由於Stream API現在可用於Java。
public static void main(String[] args)
{
String[] stringArray = {"adcfd", "adjnrj", "amlkc", "nfldkm", "cslkls"};
List<String> myList = Arrays.asList(stringArray);
Object[] result = myList.stream().filter(s -> s.startsWith("ad")).toArray();
for(Object obj : result){
System.out.println(obj);
}
}
注意這將工作只在Java 8
String[] strings = {"adcfd", "adjnrj", "amlkc", "nfldkm", "cslkls"};
String prefix = "ad";
String[] result = null;
// Use String#startsWith
result = Stream.of(strings).filter(str -> str.startsWith(prefix))
.collect(Collectors.toSet()).toArray(new String[0]);
Stream.of(result).forEach(System.out::println); //-> adjnrj adcfd
// Use String#matches (with regexp)
result = Stream.of(strings).filter(str -> str.matches("^" + prefix + ".*$"))
.collect(Collectors.toSet()).toArray(new String[0]);
Stream.of(result).forEach(System.out::println); //-> adjnrj adcfd
爲什麼使用'toSet()'而不是'toList()'? –
@LukeLee我沒有考慮太多,只是試圖刪除重複的項目。如果不需要,toList也可以。 – choasia
可能要到[正則表達式(https://en.m.wikipedia.org/wiki/Regular_expression)(正則表達式)如果你打算創建一個過濾系統。 –
查看https://docs.oracle.com/javase/8/docs/api/java/lang/String.html,看看您是否找到某種方式來確定一個字符串是否以另一個字符串開頭。 – Misha
@ user306856您是否知道您可以接受您認爲可以通過檢查旁邊的勾號來幫助您的解決方案? – user3437460