过滤数组中的字符串

时间:2016-12-14 03:01:14

标签: java arrays

我正在尝试从数组中过滤字符串。例如,我有五个字符串

  1. adcfd
  2. adjnrj
  3. amlkc
  4. nfldkm
  5. cslkls
  6. 如果我想创建一个包含已过滤数组的新数组,例如它以'ad'开头,它将创建一个包含两个元素的数组[adcfd,adjnrj]

    或者如果它以'a'开头,我们将得到一个包含三个元素的数组[adcfd,adjnrj,amlkc]

    我唯一想到的是比较所有字符串中的每个字符,直到我们得到两个“真实”,然后我们才能结束循环。

    如果有任何我不知道的功能,我可以提出任何建议吗?

4 个答案:

答案 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