Java 在不丢失可读性的情况下,知道字符串是否包含一个特定字符的最有效方法是什么?
String类的方法在且仅当字符串包含指定的字符值序列时返回true 我需要替换字符串中的一个字符,但在此操作之前,我必须验证字符串是否包含特定字符 我知道像Java 在不丢失可读性的情况下,知道字符串是否包含一个特定字符的最有效方法是什么?,java,performance,Java,Performance,String类的方法在且仅当字符串包含指定的字符值序列时返回true 我需要替换字符串中的一个字符,但在此操作之前,我必须验证字符串是否包含特定字符 我知道像indexOf和replace这样的字符操作比字符串等价物更有效 因此,我创建了一个helper方法,以了解字符串是否包含以下特定字符: boolean contains(String str, char c) { int notFound = -1; return str.indexOf(c) != notFound;
indexOf
和replace
这样的字符操作比字符串等价物更有效
因此,我创建了一个helper方法,以了解字符串是否包含以下特定字符:
boolean contains(String str, char c) {
int notFound = -1;
return str.indexOf(c) != notFound;
}
此方法比字符串的包含(字符序列)
方法更有效
我的问题:
要知道字符串是否包含一个特定字符而不丢失可读性,最有效的方法是什么?这是一个非常普遍的问题,因此答案也很简单 正如@F43nd1r所指出的,“最佳”在这里是一个模糊的术语。假设best是根据可读性、可维护性和性能合理地度量的,它在很大程度上取决于字符串的可能字符集及其长度。方法
str.indexOf(ch)>=0
当然,@khelwood的of对于常见的短字符串来说是最好的,但是它有O(n)复杂度,n
是字符串中的字符量
如果您需要为不同的字符多次查询同一字符串,并且该字符串非常大,并且可能的字符集足够有限,则您可能需要为性能进行权衡可读性:
char minChar='0';
BitSet b = new BitSet();
for (char c : string) {
b.set(c-minChar);
}
现在,您可以查询该位集,确定某个位是否设置得很快。这是一个非常普遍的问题,因此答案也将是肯定的 正如@F43nd1r所指出的,“最佳”在这里是一个模糊的术语。假设best是根据可读性、可维护性和性能合理地度量的,它在很大程度上取决于字符串的可能字符集及其长度。方法
str.indexOf(ch)>=0
当然,@khelwood的of对于常见的短字符串来说是最好的,但是它有O(n)复杂度,n
是字符串中的字符量
如果您需要为不同的字符多次查询同一字符串,并且该字符串非常大,并且可能的字符集足够有限,则您可能需要为性能进行权衡可读性:
char minChar='0';
BitSet b = new BitSet();
for (char c : string) {
b.set(c-minChar);
}
现在,您可以查询此位集是否设置了相当快的位。我只使用
myString.indexOf(myChar)>-1
如果(str.indexOf(ch)>=0)
没有通用的最佳方法。可能有一个是最有效的,但这与最好的可维护或可读的不一样。我可以问你为什么要验证吗?通过这种方式,您可以对字符串进行两次解析,因此,如果您关心性能,我只需替换
,无需事先验证。我只需使用myString.indexOf(myChar)>-1
如果(str.indexOf(ch)>=0)没有通用的最佳方法。可能有一个是最有效的,但这与最好的可维护或可读的不一样。我可以问你为什么要验证吗?通过这种方式,您可以对字符串进行两次解析,因此,如果您关心的是性能,我只需替换
,而无需事先验证。