测试 indexOf 返回值的最佳做法

Best practice for testing return value of indexOf

本文关键字:最佳 indexOf 返回值 测试      更新时间:2023-09-26

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

if str.indexOf("a") < 0 

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

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

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

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

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

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

这是我在攻读计算机科学学位期间在正式方法课上学到的原则。

在简单的if上,这并不重要,但在循环中,检测任何"超出范围"的情况以确保环路被终止非常重要,而不是假设环路终止值将被准确命中。

举个例子:

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

VS

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

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

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

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

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

所以我总是会检查 -1。 如果要检查特定值,则检查该特定值会更安全,以防止将来在 Java API 中进行代码更改。

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

根据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,那可能意味着我有一些问题。检查您的期望比检查您可能期望的内容要好。