已定义的变量:
LinkedList list1=new LinkedList();
list1中的 Object get()
获取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);
}
错误:找不到符号
symbol:方法charAt(int)
location:class Object
如何解决这个问题? 我想删除list1中以(“)。
开头的节点答案 0 :(得分:3)
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)
答案 1 :(得分:0)
如果是字符串列表,则需要告诉编译器。 Java不是duck-type,你必须明确告诉编译器Object是一个String。
List<String> list1=new LinkedList<String>();
当它以这种方式声明时,get(i)
将返回String类型的引用,您可以使用它的方法。
答案 2 :(得分:0)
如果您未指定列表类型,则Java将视为Object
的列表,并且没有Object.charAt()
方法。添加<String>
类型:
LinkedList<String> list1 = new LinkedList<String>();
或者,如果没有,请在get
电话中添加演员:
if (((String) list1.get(i)).startsWith("\"", 0))
String.startsWith()
方法采用String参数,而不是char。
if (list1.get(i).startsWith("\""))
列表索引从0开始。
for (int i = 0; i < list1.count(); i++)
^
您不应将get(int)
与LinkedList一起使用。此方法适用于random access。链接列表可以快速遍历,但随机访问速度很慢。您应该按顺序遍历列表,或使用支持快速随机访问的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();
}
}
答案 3 :(得分:0)
你正试图在Object上获取startWith,将类型转换为String。
if(((String)list1.get(i))。startsWith('“',0))
答案 4 :(得分:0)
如果(list1.get(ⅰ).startsWith( “\””,0))
答案 5 :(得分: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);
答案 6 :(得分:0)
您应该在尝试调用charAt
方法时指定LinkedList将保留或执行强制转换的对象类型。类似的东西:
LinkedList<String> list1=new LinkedList<String>();
或转为String
if (((String) list1.get(i)).startsWith("\""))