繁体   English   中英

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

[英]recommended way to find a word in a comma-separated string?

我想找到一个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;

推荐哪种方法? 拆分包含还是其他?

contains方式更快,但是容易产生误报:即使实际字符串是"Pacific Gas & Electric (PG&E)" ,它也会匹配一个子字符串,例如"Gas & Electric" "Pacific Gas & Electric (PG&E)" 您可以通过要求匹配项周围的点位于字符串的末尾或逗号来预防这种情况。 您可以通过用正则表达式括起来的搜索字符串构造一个正则表达式来改进第一种方法,该搜索字符串由结束标记(即逗号, $^ )构成,也需要完全匹配。

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

总而言之,在性能很重要的情况下,我会首选第一种方法,因为它不会浪费。 但是,如果您不时运行此方法,则基于split的方法更易于编码和读取。

对于您提到的情况,包含就足够了。 拆分将不必要地最终创建一个您不用于数据处理的附加数组(至少在上述代码中)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM