2012-11-21 30 views
-4

變量:startsWith使用錯誤在Java

LinkedList list1=new LinkedList(); 

Object get() List1中獲得的List1的節點

List1中Object remove()刪除列表1的節點

count()是list1的長度

for(int i=1;i<list1.count();i++){ 
    if(list1.get(i).startsWith('"',0)) //Error here 
    list1.remove(i); 
} 

錯誤:無法找到符號

symbol: method charAt(int)
location: class Object

如何解決這個問題?我想刪除以(「)開頭的list1中的節點。

+2

什麼錯誤? – mcalex

+2

糾正我,如果我錯了,但如果返回類型的get()是一個對象,那麼你不能啓動像它是一個字符串,是嗎? –

+0

'startsWith'預計是一個'String',你將它傳遞給'char'。 '''是一個特殊字符,需要轉義,請嘗試'「\」「'。最重要的是,'.get(int)'顯然返回一個'Object'。您還需要將該值轉換爲「String」ASSUMING,該值實際上是一個以「String」開頭的值。更好地使用仿製藥來確保 – MadProgrammer

回答

3
  1. startsWith處於String類的方法;要使用的原料鏈表類型,因此它像一個LinkedList<Object>處理如果希望使用。字符串,使之成爲LinkedList<String>
  2. startsWith只接受String爭論,不爭論char使用startsWith("\"")代替
  3. 你提供給startsWith的第二個參數是多餘的;。不提供第二個參數屁股梅的起始位置爲0.
  4. 您的if語句後有一個額外的分號。這將導致if正文被視爲空。絕對刪除這個分號並可選地使用大括號。

你修改的方案可能會是這個樣子:

LinkedList<String> list1 = new LinkedList<String>(); 

// [...] Populate the list accordingly here 

for(int i=1; i < list1.count(); i++){ 
    if (list1.get(i).startsWith("\"")) { 
     list1.remove(i); 
    } 
} 

其他注意事項:

  1. 您的循環開始於指數1。注意,這將不會刪除第一個元素。我敢肯定,如果這是你想要的行爲。
  2. 當您刪除列表中的元素時,列表中後面的元素的索引將會更改。

例如:

[ "a", "b", "c", "d" ] 
^
(remove element at index 0) 

[ "b", "c", "d" ] 
     ^
(remove element at index 1... uh oh, we missed "b"!) 

[ "b", "d" ] 
      ^
(remove element at index 2... ERROR; index out of bounds) 
+0

然後另一個錯誤:類型LinkedList不參數 – user1838839

+0

@ user1838839請原諒? –

+0

@JohnKugelman是的,你也可以這樣做。但是在0處移除似乎更直觀(對我來說,至少)並且工作得很好。也執行較少的操作,雖然我懷疑這會有很大的不同。 –

0

如果它是一個字符串列表,您需要告訴編譯器如此Java不鴨式,您必須明確地告訴編譯器該對象是一個字符串。

List<String> list1=new LinkedList<String>(); 

當它宣佈的方式,get(i)會返回一個字符串類型的參考,你可以使用它的方法。

0
  1. 如果不指定列表類型,Java將視爲012的列表s,並且沒有Object.charAt()方法。添加<String>類型:

    LinkedList<String> list1 = new LinkedList<String>(); 
    

    或者缺席的是,鑄造添加到get電話:

    if (((String) list1.get(i)).startsWith("\"", 0)) 
    
  2. String.startsWith()方法接受一個String參數,而不是一個字符。

    if (list1.get(i).startsWith("\"")) 
    
  3. 列表索引是從0開始的。

    for (int i = 0; i < list1.count(); i++) 
          ^
    
  4. 您不應該使用get(int)與LinkedList。此方法適用於random access。鏈接列表可以快速遍歷,但隨機訪問速度很慢。您應該按順序遍歷列表,或使用支持快速隨機訪問的ArrayList

    for (String str: list1) { 
    } 
    
    // or 
    
    List<String> list1 = new ArrayList<String>(); 
    
  5. 在迭代時從列表中刪除元素是非常棘手的。最好的方法是使用迭代器。

    Iterator<String> it = list1.iterator(); 
    
    while (it.hasNext()) { 
        String str = it.next(); 
    
        if (str.startsWith("\"")) { 
         it.remove(); 
        } 
    } 
    
0

你試圖讓startWith上的對象,強制轉換爲字符串。

如果(((字符串)list1.get(I))。startsWith( '「',0))

0

如果(list1.get(i)中。startsWith(「\」」,0))

0
List<String> itemsToBeRemoved = new ArrayList<String>(); 

for(int i=1;i<list1.count();i++){ 
    String str = list1.get(i); 
    if(str.startsWith("\"")) 
    itemsToBeRemoved.add(str); 
} 
list1.removeAll(itemsToBeRemoved); 
0

您應該指定一個試圖調用charAt方法,當你的LinkedList將舉行或進行鑄造的對象類型。喜歡的東西:

LinkedList<String> list1=new LinkedList<String>(); 

或鑄造到String

if (((String) list1.get(i)).startsWith("\"")) 
+0

沒有'String#startsWith(char,int)'方法;) – MadProgrammer