8

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

if str.indexOf("a") < 0 

对比

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

一种方法会优于另一种方法吗?

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

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

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

4

6 回答 6

4

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

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

简单if来说,这并不重要,但在循环中,重要的是检测任何“超出范围”条件以确保循环终止,而不是假设循环终止值将被准确命中。

举个例子:

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

对比

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

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

于 2012-04-16T14:17:41.073 回答
2

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

于 2012-04-16T14:18:29.500 回答
1

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

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

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

例如,如果你得到一个 -2,这意味着你的 JVM 中出现了严重错误。这并不意味着“未找到”。代码继续执行并导致异常/错误会更好。

于 2012-04-16T14:20:34.017 回答
0

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

于 2012-04-16T14:19:07.467 回答
0

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

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

所以,这是一个见仁见智的问题。只要公约继续存在,就没有关系。

于 2012-04-16T14:20:59.553 回答
0

我会使用-1只是因为我想检查我的期望。

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

于 2012-04-16T14:21:17.443 回答