2016-12-14 68 views
0

我想从数组中过滤字符串。例如,我有五串从数组中过滤字符串

  1. adcfd
  2. adjnrj
  3. amlkc
  4. nfldkm
  5. cslkls

如果我想创建一个新的数组,包含过滤阵列,例如它与“广告”,它会创建两个元素的数组[adcfd,adjnrj]

开始,或者如果它开始“一”,我们会与三个元素的数组[adcfd,adjnrj,amlkc]

我脑海中唯一的事情就是比较所有字符串中的每个字符,直到我们得到两个'trues',然后我们可以结束循环。

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

+0

可能要到[正则表达式(https://en.m.wikipedia.org/wiki/Regular_expression)(正则表达式)如果你打算创建一个过滤系统。 –

+1

查看https://docs.oracle.com/javase/8/docs/api/java/lang/String.html,看看您是否找到某种方式来确定一个字符串是否以另一个字符串开头。 – Misha

+0

@ user306856您是否知道您可以接受您认为可以通过检查旁边的勾号来帮助您的解决方案? – user3437460

回答

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] 
0

我觉得你可以排序字符串第一,那么你可以得到所有匹配的字符串没有比较所有字符串元素。

替代代码段:

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] 
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

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 
+0

为什么使用'toSet()'而不是'toList()'? –

+0

@LukeLee我没有考虑太多,只是试图删除重复的项目。如果不需要,toList也可以。 – choasia