Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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 测试indexOf返回值的最佳实践_Java_Javascript - Fatal编程技术网

Java 测试indexOf返回值的最佳实践

Java 测试indexOf返回值的最佳实践,java,javascript,Java,Javascript,在测试indexOf的返回值时,您通常写什么 if str.indexOf("a") < 0 一种方法比另一种更可取吗 我实际上是在为任何语言中错误返回-1的函数提出这个问题 我通常更喜欢

在测试indexOf的返回值时,您通常写什么

if str.indexOf("a") < 0 
一种方法比另一种更可取吗

我实际上是在为任何语言中错误返回-1的函数提出这个问题

我通常更喜欢<0方法,因为如果函数在其他情况下扩展为返回-2,代码仍然可以工作


但是,我注意到==-1方法更常用。有什么原因吗?

我试图实现“错误条件”测试应尽可能广泛的一般原则。因此,我将使用
<0
而不是
=-1

这是我在CS学位期间,在正式方法的课堂上教授的一条原则

在一个简单的
if
上,这并不重要,但在循环上,重要的是要检测任何“超出范围”的情况,以确保循环终止,而不是假设循环终止值将被精确命中

例如:

i = 0;
while (i < 10) {
    ++i;
    // something else increments i
}

后一种情况可能会失败-前一种情况不会。根据javadoc,我也更希望,如果字符不按顺序出现,indexOf总是应该返回-1

在几乎所有情况下,建议尽可能坚持使用Java文档。 参见Java文档:

。。。根据它:-1将被返回

所以我总是检查-1。如果您有一个特定的值要检查,那么更安全的做法是检查该特定的值,以防止将来java api中的代码更改


例如,如果您得到了a-2,这意味着JVM中有些东西严重错误。这并不意味着“找不到”。代码继续并导致异常/错误会更好。

正如Sandeep Nair指出的那样,javaDoc对此进行了解释,但我想对此稍作评论

两者都很好,我不会说其中一个比另一个更好。许多人编写
==-1
的原因是,有一个普遍的惯例,即如果“找不到东西”,搜索方法将返回-1。我们不能使用0,因为它们在数组等中用作索引


所以,这是一个意见的问题。只要约定保持不变,就没关系。

我会使用
-1
,因为我想检查我的期望值


我不希望看到
-2
。如果我得到了
-2
,那可能意味着我有一些问题。检查您期望的内容比检查您可能期望的内容要好。

对于Java,indexOf明确指定如果在字符串中找不到匹配项,它将返回-1。因此,更改它将是API中的一个中断,因此我们可以相信它将返回-1。但是如果(!~str.indexOf(“a”)稍微不那么详细,我也更喜欢使用
。但是在这种情况下,Java API特别告诉我们将返回-1。它是,但它隐含着成功时将返回0或更高的整数值,因此相反(即
<0
)是完全有效的计数器测试。如果返回-2,则不表示“未找到”。它没有定义。。难道您不希望代码继续运行并导致空指针或某些错误吗?通过这种方式,至少可以揭示JVM问题。
i = 0;
while (i < 10) {
    ++i;
    // something else increments i
}
i = 0;
while (i != 10) {
    ++i;
    // something else increments i
}