[英]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 中以 (") 開頭的節點。
startsWith
是String
類中的一個方法; 您使用的是原始 LinkedList 類型,因此它被視為LinkedList<Object>
。 如果您希望使用字符串,請將其設為LinkedList<String>
。startsWith
只接受String
參數,不接受char
參數。 使用startsWith("\\"")
代替。startsWith
的第二個參數是多余的; 不提供第二個參數將假定起始位置為 0。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);
}
}
補充說明:
例如:
[ "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 類型的引用,您可以使用它的方法。
如果不指定列表類型,Java 會將 is 視為Object
的列表,並且沒有Object.charAt()
方法。 添加<String>
類型:
LinkedList<String> list1 = new LinkedList<String>();
或者,如果沒有,向get
調用添加一個演員表:
if (((String) list1.get(i)).startsWith("\\"", 0))
String.startsWith()
方法接受一個字符串參數,而不是一個字符。
if (list1.get(i).startsWith("\\""))
列表索引是從 0 開始的。
for (int i = 0; i < list1.count(); i++) ^
您不應該將get(int)
與 LinkedList 一起使用。 此方法用於隨機訪問。 鏈表可以快速按順序遍歷,但隨機訪問速度較慢。 您應該按順序遍歷列表,或者使用支持快速隨機訪問的ArrayList 。
for (String str: list1) { } // or List<String> list1 = new ArrayList<String>();
在迭代列表時從列表中刪除元素很棘手。 最好的方法是使用迭代器。
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.