簡體   English   中英

在java中使用錯誤startsWith

[英]startsWith using error in java

定義變量:

 LinkedList list1=new LinkedList();

list1 中的Object get()獲取 list1 的一個節點

list1 中的Object remove()刪除 list1 的一個節點

count()是 list1 的長度

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

錯誤:找不到符號

符號:方法 charAt(int)
位置:類對象

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

  1. startsWithString類中的一個方法; 您使用的是原始 LinkedList 類型,因此它被視為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. 您的 for 循環從索引 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)

如果它是一個字符串列表,則需要告訴編譯器。 Java 沒有鴨子類型,您必須明確告訴編譯器 Object 是一個字符串。

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

當以這種方式聲明時, get(i)將返回一個 String 類型的引用,您可以使用它的方法。

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

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

    或者,如果沒有,向get調用添加一個演員表:

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

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

     for (int i = 0; i < list1.count(); i++) ^
  4. 您不應該將get(int)與 LinkedList 一起使用。 此方法用於隨機訪問 鏈表可以快速按順序遍歷,但隨機訪問速度較慢。 您應該按順序遍歷列表,或者使用支持快速隨機訪問的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(); } }

您正在嘗試在 Object 上使用 startWith,將其類型轉換為 String。

if(((String)list1.get(i)).startsWith('"',0))

if(list1.get(i).startsWith("\\"",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);

在嘗試調用charAt方法時,您應該指定 LinkedList 將保存的對象類型或執行charAt 就像是:

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

或轉換為String

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM