什么是最有效的方法来知道String是否包含一个特定的char而不会丢失可读性?

时间:2016-02-23 13:19:30

标签: java performance

String类的方法contains(CharSequence s)当且仅当字符串包含指定的char值序列时才返回true。

我需要从字符串中替换一个char,但在此操作之前,我必须验证字符串是否包含特定的char。

我知道indexOfreplace的char操作比String等效更有效。

所以我创建了一个帮助器方法来知道String是否包含特定的char:

boolean contains(String str, char c) {
     int notFound = -1;
     return str.indexOf(c) != notFound; 
}

此方法比String的contains(CharSequence s)方法更有效。

我的问题:

知道String是否包含一个特定的char而不会失去可读性的最高效方法是什么?

1 个答案:

答案 0 :(得分:3)

这是一个非常笼统的问题,所以答案也是

正如@ F43nd1r所指出的那样,“最好的”在这里是一个模糊的术语。假设最好是根据可读性,可维护性和性能进行合理测量,它在很大程度上取决于字符串的可能字符集及其长度。方法

str.indexOf(ch)>=0
@khelwood的

肯定是常见短字符串的最佳选择,但它具有O(n)复杂度,n是字符串中字符的数量。

如果您需要为不同的字符多次查询相同的字符串,并且它非常大且可能的字符集足够有限,您可能希望为性能提供交易可读性:

char minChar='0';
BitSet b = new BitSet();
for (char c : string) {
  b.set(c-minChar);
}

现在你可以查询这个BitSet是否设置了一个非常快的位。