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

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

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

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

看起来你想看看是否包含一个单词 。 你可以这样做:

 Set words = new HashSet(Arrays.asList(description.split(" "))); ... words.contains(s) ... 

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

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

锚点\b匹配单词边界。

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; } } 

这是另一种解决方案,可能不是最好或更有效,但有效,并显示了这些库的强大function。 所以,你可以使用lambdaj( 在这里下载 – 网站 )和hamcrest( 在这里下载 – 网站 ),这个库非常强大,用于管理集合,下面的代码非常简单,工作完美:

 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 source = Arrays.asList("This time only $FB,$RUG is highest priority".split(" ")); List 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.jarlambdaj-2.4.jar

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

(编辑)现在也适用于这种情况, “这次只有$ FB,$ RUG是最高优先级”