我想查找utility
中是否有utilities
。
我有一个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;
推荐哪种方法? 拆分或包含还是其他什么?
答案 0 :(得分:3)
contains
方式更快,但容易出现误报:它会匹配一个子字符串,比如"Gas & Electric"
,即使实际字符串为"Pacific Gas & Electric (PG&E)"
。您可以通过要求匹配周围的点位于字符串的末尾或逗号来防止这种情况发生。您可以通过从由末尾标记(即逗号,$
和^
构成的正则表达式引用的搜索字符串构造正则表达式来改进第一种方法,以获得完全匹配。
split
方式更可靠,但它很浪费:你最终会创建一个完整的子串数组,只检查是否存在单个字符串,然后扔掉其余的字符串。
总而言之,在性能很重要的情况下,我更倾向于使用第一种方法,因为它并不浪费。但是,如果您偶尔运行此方法,则基于split
的方法更易于编码和阅读。
答案 1 :(得分:0)
对于你提到的包含的情况应该足够了。拆分会不必要地最终创建一个你没有用于数据处理的附加数组(至少在上面提到的代码中)。
您还需要考虑的另一点是您将在给定的字符串中执行多少次搜索。如果您在实用程序字符串中执行多个String实用程序搜索,那么您应该考虑使用更复杂的数据结构来启用多个快速搜索,例如:后缀树。