我猜的不是一个问题,而是更多的验证,但我已经创建了一个Java应用程序来列出可用的网络,通过linux,我只想知道是否有人知道更好/更有效的方法来做到这一点。
它在我的机器上运行良好,但我的目标是在不那么“有能力”的机器上运行,功率也有限。
基本上,我有终端输出,我按以下方式处理字符串。当谈到正则表达式时,我是相当新的所以我想知道是否有更好/更有效的方式?
String t = s.replace("SSID:", "");
t = t.replace("\"", "");
t = t.trim();
提前致谢!
答案 0 :(得分:2)
正如其他人所说,这看起来像是过早优化的情况。我只是想解决你对replace()
和正则表达式的明显误解。
replace()
方法将搜索字词视为完全字符串,而不是正则表达式。它是replaceAll()
进行正则表达式匹配;有了它,你可以将两个replace()
操作合并为一个,如下所示:
String t = s.replaceAll("\"|SSID:", "").trim();
您甚至可以取消trim()
来电并使用replaceAll()
执行所有:
String t = s.replaceAll("\"|SSID:|^\\s+|\\s+$", "");
但仅仅因为它在一次操作中完成并不一定意味着它更有效 - 它甚至可以更少效率。但在这种情况下,效率的任何差异都会非常小,你甚至都不会注意到它。你也可以坚持你所拥有的。
答案 1 :(得分:0)
由于您正在处理外部应用程序的输出,因此总有一天输出会发生变化的风险。
因此,虽然性能并不重要(网络列表计划可能需要几千倍的时间,更不用说分支新流程的基本成本),但更灵活的解决方案肯定会更好。
作为示例:您可以使用单个String.replaceAll()
混合捕获和非捕获组来从输入中删除除了您需要的位之外的所有内容。这允许您将模式存储在配置文件中,因此每次输出格式更改时都不需要重写替换算法。更好的是,您可以在配置文件中包含多个模式,每个已知变体一个模式,您可以测试哪个与您的输入匹配。