【发布时间】:2015-03-02 05:17:50
【问题描述】:
我有一个包含数千个字符串的列表,可能以下列形式出现:
单词
或
“不止一个词”
我想在它们出现时删除“”,以便我可以将字符串保存到我的数据库中。
我想知道哪种方法更快:
- 使用
line.replace("\"",""); - 验证第一个字符是 '"',然后创建一个从字符 1 到长度 - 1 的子字符串。
甚至,有没有更好的方法来做到这一点?
【问题讨论】:
-
这两种方法都需要遍历几乎整个字符串,但
substring不必将每个字符与"进行比较,因此它可能会更快。 -
预优化是邪恶的,只是说。除非它成为一个问题,否则你不应该担心它。您有性能问题吗?
-
line.replace 迭代每个字符,进行比较并将其存储在一个新的缓冲区数组中。另一方面, line.substring 在内部使用 JNI 和 Arrays.copyOfRange 来创建一个新字符串。 line.substring 可能会更快。
-
@Vince - 我不确定这是预优化。对我来说(天真地),它观察 Big-O 类型的东西。我尝试在考虑内存/空间/时间权衡的情况下选择算法和实现。当您可以选择已知执行要求的东西时,为什么还要掷骰子呢?或者为什么要等它成为问题?
-
@jww 预优化是在您知道需要它们之前执行任何优化。如果他觉得他需要扩展他的应用程序,而他当前的系统无法扩展,那么这将是一个问题。但是花时间尝试优化可能不需要优化的东西会浪费大量时间,从而导致进展缓慢。尽管这可能适合“时间复杂度”类型的辩论,但他没有在该级别上展示过对这种情况的先前研究。他担心提高性能,但没有告诉我们是否真的需要它,这属于预优化
标签: java string optimization replace