测试indexOf返回值的最佳实践

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

if str.indexOf("a") < 0 

VS

 if str.indexOf("a") == -1 

一种方法比另一种方法更受欢迎吗?

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

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

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

我尝试实现一般原则,即“错误条件”的测试应该尽可能宽。 因此我会使用< 0而不是== -1

这是我在CS学位期间在正式方法课程中教授的原则。

一个简单的if它没关系太多,但是在循环中,检测任何“超出范围”条件以确保循环终止是重要的,而不是假设循环终止值将被精确命中。

以此为例:

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

VS

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

后一种情况可能会失败 - 前一种情况不会。

我也更喜欢<0方法。 == -1方法被广泛使用的原因是,根据Java文档,如果缺少索引并且“扩展函数”的情况永远不会发生,函数确实会返回-1。

在几乎所有情况下都建议尽可能地坚持使用Java文档。 请参阅Java Doc: http : //docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29

……根据它:-1将被退回。

所以我总是检查-1。 如果要检查特定值,则检查该特定值会更安全,以防止java api中的未来代码更改。

例如,如果你得到-2,这意味着你的JVM中的某些东西是严重错误的。 这并不意味着“没有找到”。 代码进行并导致exception/错误会更好。

根据javadoc indexOf总是应该返回-1,如果字符没有按顺序出现http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29

正如Sandeep Nair指出javaDoc解释的那样,但我想稍微评论一下。

两者都可以正常工作,我不会说一个比另一个“更好”。 很多人写== -1的原因是,如果“无法找到东西”,搜索方法会返回-1,这是一般惯例。 我们不能使用0,因为它们被用作数组等中的索引。

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

我之所以使用-1只是因为我想检查一下我的期望。

我不期待-2 。 如果我得到-2 ,那可能意味着我有一些问题。 检查你期望的东西比检查你的期望更好。