Java 在逗号分隔字符串中查找单词的推荐方法?

Java 在逗号分隔字符串中查找单词的推荐方法?,java,string,Java,String,我想查找实用程序是否在其中一个实用程序中 我有一个JUnit测试,如下所示 @Test public void testUtilityInUtilities() { final String utilities = "Pacific Gas & Electric (PG&E),San Diego Gas & Electric (SDG&E), Salt River Project (SRP),Southern California Edison (SCE)

我想查找
实用程序
是否在其中一个
实用程序

我有一个
JUnit
测试,如下所示

@Test
public void testUtilityInUtilities() {
    final String utilities = "Pacific Gas & Electric (PG&E),San Diego Gas & Electric (SDG&E), Salt River Project (SRP),Southern California Edison (SCE)";
    final String utility = "San Diego Gas & Electric (SDG&E)";
    assertTrue(utilities.contains(utility));
}
这是一个足够好的测试吗?或者我应该做一些类似于下面的事情吗

String[] splitString = (utilities.split(","));
for (String string : splitString) {
    if (string.equals(utility)) {return true;}
}
return false;

推荐哪种方法拆分包含或任何其他内容?

包含
的方式速度更快,但容易出现误报:它将匹配子字符串,例如,
“Gas&Electric”
,即使实际字符串是
“Pacific Gas&Electric(PG&E)”
。您可以通过要求匹配周围的点位于字符串的末尾或逗号来防止这种情况。您可以对第一种方法进行改进,方法是从由结束标记(即逗号、
$
^
构成的带引号的搜索字符串中构造正则表达式,以要求完全匹配

split
方法更可靠,但它是浪费的:您最终创建了一个完整的子字符串数组,只检查是否存在单个字符串,然后丢弃其余的字符串


总而言之,在性能重要的情况下,我更喜欢第一种方法,因为它不是浪费。但是,如果您偶尔运行此方法,则基于
拆分的方法更易于编码和阅读。

对于您提到的包含的情况,就足够了。Split将不必要地创建一个额外的数组,而您不使用该数组进行数据处理(至少在上述代码中)

还有一点,你需要考虑的是,你将在给定的字符串中执行多少次搜索。如果要在实用程序字符串中执行字符串实用程序的多个搜索,则应考虑使用更复杂的数据结构,以支持多个快速搜索,例如:后缀树