2015-04-12 72 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