包含String的方法无法正常工作

时间:2013-08-07 15:33:56

标签: java string

我有一个问题,但我无法解决这个问题。

  public static  void main(String [] arg) {    
         String description = "This time only $FB is highest priority";
         List<String> list = new ArrayList<String>();
         list.add("$FB");
         list.add("$F");
         for(String s : list) {
           if(description.contains(s)) {
              System.out.println(s);
           } 
         }
}

我得到的输出是$ FB和$ F,但是这个虚拟字符串只包含列表中的一个字符串..还有其他任何方法只能提供完全匹配吗?

4 个答案:

答案 0 :(得分:8)

看起来您想要查看是否包含。你可以这样做:

Set<String> words = new HashSet<String>(Arrays.asList(description.split(" ")));

...
words.contains(s)
...

答案 1 :(得分:8)

您可以使用正则表达式检查字符串是否包含单词:

if (description.matches(".*\\b"+Pattern.quote(s)+"\\b.*")) {
    ...
}

锚点\b匹配单词边界。

答案 2 :(得分:0)

contains是一个记录良好且经过充分测试的企业级软件框架方法(根据经验)通常意味着它正在运行正常。

在这种特殊情况下,contains方法运行正常。您的初始字符串包含$FB,因此如果您考虑它,它还包含$F(以及FB$以及FB )。

也许(而且我做了一个疯狂的猜测)而不是你试图找到最后找到的项目后包含的内容。在这种情况下,请勿使用contains,使用indexOf,保存该值,然后从该已保存的值中搜索并开启。

每个请求

编辑,以下是此类代码的示例。请注意,我没有对其进行测试,因此可能会缺少一些检查:

     int currentIndex = 0;
     for(String s : list) {
       int foundIndex = description.indexOf(s, currentIndex);
       if(foundIndex >= 0) {
          System.out.println(s);
          currentIndex = foundIndex + 1;
       } 
     }

答案 3 :(得分:0)

这是另一种解决方案,可能不是最好或更有效,但有效,并显示了这些库的强大功能。 所以,你可以使用lambdaj(download here - website)和hamcrest(download here - website),这个库对于管理集合非常强大,下面的代码非常简单并且完美地运作:

import static ch.lambdaj.Lambda.having;
import static ch.lambdaj.Lambda.on;
import static ch.lambdaj.Lambda.select;
import static org.hamcrest.Matchers.stringContainsInOrder;

import java.util.Arrays;
import java.util.List;

public class StringContains_03{
        public static void main(String[] args) {
            List<String> source =  Arrays.asList("This time only $FB,$RUG is highest priority".split(" "));
            List<String> patterns = Arrays.asList("$FB","$F");

            boolean patternsExistsInSource = select(source, having(on(String.class), stringContainsInOrder(patterns))).size()>0;
            System.out.println(patternsExistsInSource);//shows: true
            System.out.println(select(source, having(on(String.class), stringContainsInOrder(patterns))));//shows the matches: [$FB,$RUG]
    }
}

请注意,只有使用此行,您才能知道该模式是否在另一行中。

 boolean patternsExistsInSource = select(source, having(on(String.class), stringContainsInOrder(patterns))).size()>0;

使用这些库,您可以在一行中解决您的问题。您必须添加到您的项目: hamcrest-all-1.3.jar lambdaj-2.4.jar

注意:这可以帮助您假设您可以选择代码。我希望这会有用。

(已编辑)现在也适用于此案例, “这次只有$ FB,$ RUG是最高优先级”