我正在尝试从数组中过滤字符串。例如,我有五个字符串
如果我想创建一个包含已过滤数组的新数组,例如它以'ad'开头,它将创建一个包含两个元素的数组[adcfd,adjnrj]
或者如果它以'a'开头,我们将得到一个包含三个元素的数组[adcfd,adjnrj,amlkc]
我唯一想到的是比较所有字符串中的每个字符,直到我们得到两个“真实”,然后我们才能结束循环。
如果有任何我不知道的功能,我可以提出任何建议吗?
答案 0 :(得分:0)
您需要在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]
答案 1 :(得分:0)
我认为您可以排序String 然后您可以获得所有匹配的String 而无需比较所有字符串元素。
替代代码段:
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]
答案 2 :(得分:0)
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。
答案 3 :(得分:0)
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