包含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
和$
以及F
和B
,如果你考虑的话)。
也许(而且我做了一个疯狂的猜测)而不是你试图找到最后找到的项目后包含的内容。 在这种情况下,不要使用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.jar和lambdaj-2.4.jar 。
注意 :这将帮助您假设您可以选择代码。 我希望这会有用。
(编辑)现在也适用于这种情况, “这次只有$ FB,$ RUG是最高优先级” 。