Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不丢失可读性的情况下,知道字符串是否包含一个特定字符的最有效方法是什么?_Java_Performance - Fatal编程技术网

Java 在不丢失可读性的情况下,知道字符串是否包含一个特定字符的最有效方法是什么?

Java 在不丢失可读性的情况下,知道字符串是否包含一个特定字符的最有效方法是什么?,java,performance,Java,Performance,String类的方法在且仅当字符串包含指定的字符值序列时返回true 我需要替换字符串中的一个字符,但在此操作之前,我必须验证字符串是否包含特定字符 我知道像indexOf和replace这样的字符操作比字符串等价物更有效 因此,我创建了一个helper方法,以了解字符串是否包含以下特定字符: boolean contains(String str, char c) { int notFound = -1; return str.indexOf(c) != notFound;

String类的方法在且仅当字符串包含指定的字符值序列时返回true

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

我知道像
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)没有通用的最佳方法。可能有一个是最有效的,但这与最好的可维护或可读的不一样。我可以问你为什么要验证吗?通过这种方式,您可以对字符串进行两次解析,因此,如果您关心的是性能,我只需
替换
,而无需事先验证。