startsWith在java中使用错误

时间:2012-11-21 04:42:22

标签: 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);
}

错误:找不到符号

  

symbol:方法charAt(int)
  location:class Object

如何解决这个问题? 我想删除list1中以(“)。

开头的节点

7 个答案:

答案 0 :(得分:3)

  1. startsWithString类中的一种方法;您正在使用原始LinkedList类型,因此它被视为LinkedList<Object>。如果您希望使用字符串,请将其设为LinkedList<String>
  2. startsWith仅接受String个参数,而不接受char个参数。请改用startsWith("\"")
  3. 您提供给startsWith的第二个参数是多余的;不提供第二个参数将假设起始位置为0。
  4. if声明后,您有一个无关的分号。这将导致if正文被视为空。绝对删除这个分号,并可选择使用花括号。

  5. 您修改的解决方案可能如下所示:

    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. 当您删除列表中的元素时,列表中后面元素的索引将会更改。
    3. 例如:

      [ "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)

  1. 如果您未指定列表类型,则Java将视为Object的列表,并且没有Object.charAt()方法。添加<String>类型:

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

    或者,如果没有,请在get电话中添加演员:

    if (((String) list1.get(i)).startsWith("\"", 0))
    
  2. String.startsWith()方法采用String参数,而不是char。

    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();
        }
    }
    

答案 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("\""))