String类的方法contains(CharSequence s)
当且仅当字符串包含指定的char值序列时才返回true。
我需要从字符串中替换一个char,但在此操作之前,我必须验证字符串是否包含特定的char。
我知道indexOf
和replace
的char操作比String等效更有效。
所以我创建了一个帮助器方法来知道String是否包含特定的char:
boolean contains(String str, char c) {
int notFound = -1;
return str.indexOf(c) != notFound;
}
此方法比String的contains(CharSequence s)
方法更有效。
我的问题:
知道String是否包含一个特定的char而不会失去可读性的最高效方法是什么?
答案 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是否设置了一个非常快的位。