-4

定义变量:

 LinkedList list1=new LinkedList();

Object get()在 list1 中获取 list1 的一个节点

Object remove()in list1 删除 list1 的一个节点

count()是 list1 的长度

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

错误:找不到符号

符号:方法 charAt(int)
位置:类 Object

如何解决这个问题?我想删除 list1 中以 (") 开头的节点。

4

7 回答 7

3
  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)
于 2012-11-21T04:46:16.853 回答
0

如果它是字符串列表,则需要告诉编译器。Java 没有鸭式类型,您必须明确告诉编译器该对象是一个字符串。

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

当它以这种方式声明时,get(i)将返回 String 类型的引用,您可以使用它的方法。

于 2012-11-21T04:44:55.473 回答
0
  1. 如果不指定 list 类型,Java 会将 is 视为Objects 的列表,没有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();
        }
    }
    
于 2012-11-21T04:45:08.730 回答
0

您正在尝试在 Object 上获取 startWith,类型转换为 String。

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

于 2012-11-21T04:45:36.280 回答
0

if(list1.get(i).startsWith("\"",0))

于 2012-11-21T04:45:54.417 回答
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);
于 2012-11-21T04:46:11.803 回答
0

您应该指定 LinkedList 在尝试调用该charAt方法时将持有或执行强制转换的对象类型。就像是:

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

或投射到String

if (((String) list1.get(i)).startsWith("\""))
于 2012-11-21T04:47:41.450 回答