2015-04-12 47 views
-3

什么的这段代码差异性之探源:如何使用indexOf方法搜索java中的集合?

{ 
... 
     int counter = 0; 
    for (String item : Names) 
    { 
    int i = item.indexOf("a"); 
    counter = i; 
    } 
    return counter; 
... 
} 

这:

{ 
... 
       int counter = 0; 
     for (String item : Names) 
     { 
     if(item == "a") 
        return counter; 
       else 
        counter++; 
     } 
     return null ; 
... 
} 

在facti,如何工作,在Java中的indexOf方法? 谢谢。

+2

[Javadoc for'indexOf()']的什么部分(https://docs.oracle.com/javase/7/docs/api/ java/util/List.html#indexOf%28java.lang.Object%29)你觉得困惑吗?此外,'item ==“a”'永远不会产生所需的结果,因为这不是[字符串比较如何完成](在Java中)(http://stackoverflow.com/questions/767372/java-string-equals-versus) 。 –

+0

谢谢......................... – oop12

回答

0

第一个片段返回string项中第一个出现的字符a的索引,然后退出。

第二个片段查找名称并返回完全匹配“a”的字符串的索引,然后退出。

indexOf只是返回字符串中字符或子字符串的第一次出现。

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

+0

谢谢,但是当我使用seconde代码时,错误eccured,为什么?... – oop12

+0

是你的返回类型整数或整数?它将与Integer一起工作,但不是int。 – user1227054

0

在您的第一个代码中,如果您的字符串包含“a”,那么它将返回索引“a”。 在你的第二个代码中,如果你正在检查字符串==“a”。

indexOf()String的属性用于获取String中特定字符的索引。 获得索引后,您可以使用该索引创建子字符串。

0

你可以找到indexOfhere文档:

返回此字符串的 指定字符第一次出现处的索引

你的第一段代码检查,在该指数a发生在列表的最后一个字符串中(例如[a,ab,abc,bcaba] -> 2,因为a位于bcaba的位置2; [a,b,c] -> -1,因为c doesn' t包含a)。

您的第二段代码检查存储在列表a中的哪个位置(例如[aa,cc,bb,a,b,c] -> 3)。

但是请注意,当您应该使用equals时,在第二个代码中使用引用相等,因此您的方法很可能会返回null,这也可能解释它不适用于您。

0

的主要区别是,如果正在测试不同的条件:在一,存在的“a”的字符串内;在第二个,该项目的身份与文字“a”。

下一个区别是,即使在找到匹配之后,第一个版本仍无意义地继续搜索。

0

代码片段有很多不同之处。在第一种情况下,您正在使用增强for循环来扫描Names数组中的所有元素(通常变量名不是以大写字母开头),对于您试图获取第一次出现的索引一个字符串。例如,如果你有以下情况:

String [] Names = {"house","main","method"} 

在这三串的性格正好位于主词,那么你的程序将返回1,一个字主打内线的位置。 在第二种情况下,您试图对付参考文献中的每个元素和a。我想记住,关于字符串的平等检查使用equals和not来进行。无论如何,在第二种情况下,您正在阵列中排列字符串a。如果你发现它,你返回关于这个字符串的位置,否则你会得到numm