繁体   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