我有一个问题,但我无法解决这个问题。
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,但是这个虚拟字符串只包含列表中的一个字符串..还有其他任何方法只能提供完全匹配吗?
答案 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
和$
以及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;
}
}
答案 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是最高优先级” 。