字符串s1和s2的长度始终为1或更高.
我怎样才能加快速度呢?
int l1 = s1.length();
if (l1 > 3) { l1 = 3; }
if (s2.startsWith(s1.substring(0,l1)))
{
// do something..
}
Run Code Online (Sandbox Code Playgroud)
正则表达式可能吗?
这似乎很合理.这对你来说真的太慢了吗?你确定这不是过早的优化吗?
你的直觉是正确的.新对象(substring())的创建速度不是很快,这意味着每个创建的对象也必须产生g/c开销.
这可能会快得多:
static boolean fastCmp(String s1, String s2) {
return s1.regionMatches(0, s2, 0, 3);
}
Run Code Online (Sandbox Code Playgroud)
if (s2.startsWith(s1.substring(0, Math.min(3, s1.length())) {..};
Run Code Online (Sandbox Code Playgroud)
顺便说一句,没有什么慢的。startsWith有复杂性O(n)
另一种选择是比较 char 值,这可能更有效:
boolean match = true;
for (int i = 0; i < Math.min(Math.min(s1.length(), 3), s2.length()); i++) {
if (s1.charAt(i) != s2.charAt(i)) {
match = false;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16753 次 |
| 最近记录: |