尝试从ArrayList中的字符串中删除特定单词

时间:2016-03-29 00:58:04

标签: java arraylist

我正在制作一个ArrayList String,并且该类中的一个方法需要String,将“紧急:”添加到其前面,并将其放置在列表的开头。我现在正在编写一个方法,该方法应该采用intString的位置,并将该字符串“降级”到列表的末尾。

但是,如果字符串前面有“urgent:”,那么该方法也应该删除“urgent:”如果它被降级。一切都编译并运行,但它并没有删除“紧急:”,我不知道为什么。

public void addUrgetItem(String newItem) {
    String urgentItem = newItem; 
    items.add(0, "urgent: " + urgentItem); 
}

public void demote(int position) {
    int size = items.size();  
    String itemAtSpot = items.get(position); 
    items.remove(itemAtSpot); 
    items.add((size-1), itemAtSpot); 

    if (itemAtSpot.startsWith("urgent:")) {
        items.remove("urgent:"); 
    }
}

2 个答案:

答案 0 :(得分:5)

当你这样说时:

items.remove("urgent:");

它试图删除文字String"紧急"从列表本身,而不是列表中的任何特定项目。相反,您需要先将该文字从itemAtSpot中删除,然后再将其添加回List。这看起来像这样:

public void demote(int position) {
    int size = items.size();  
    String itemAtSpot = items.get(position); 
    items.remove(itemAtSpot); 
    if (itemAtSpot.startsWith("urgent: ")) {
        itemAtSpot = itemAtSpot.substring("urgent: ".length());
    }
    items.add(itemAtSpot); 
}

因此,在删除String之后,您将在" urgent:"之后获取所有内容的子字符串,然后将其添加回最后的List

答案 1 :(得分:4)

通过调用items.remove("urgent:");,你试图从ArrayList中删除一个不存在的字符串,一个包含"urgent"的字符串,除了紧急之外什么也没有。相反,你必须删除" urgent"来自ArrayList持有的 String 。这可以通过使用String的replace(...)方法来完成,替换" urgent:"与"":myString.replace("urgent:", "");

但是说到这一点,你实际上可以做得更好,因为你正在做一个共同的编程邪恶:使用字符串来保存逻辑信息,比他们应该更多的逻辑。不要让ArrayList保存字符串,为什么不让它保存自定义类的对象,可以有boolean urgent字段的类,可以通过方法轻松设置的字段?

例如,

public class MyItem {
    private String text;
    private boolean urgent = false;

    public MyItem(String text) {
        this.text = text;
    }

    public MyItem(String text, boolean urgent) {
        this.text = text;
        this.urgent = urgent;
    }

    public boolean isUrgent() {
        return urgent;
    }

    public void setUrgent(boolean urgent) {
        this.urgent = urgent;
    }

    public String getText() {
        return text;
    }

    @Override
    public String toString() {
        return text;
    }

    // ... equals and hashCode methods based on text only
}

和....

private List<MyItem> items = new ArrayList<>();

// .....

public void addUrgetItem(String newItem) {
    MyItem item = new MyItem(newItem, true); 
    items.add(0, item); 
}

public void demote(int position) {
    int size = items.size();  
    MyItem itemAtSpot = items.get(position); 
    items.remove(itemAtSpot); 
    itemAtSpot.setUrgent(false);
    items.add((size-1), itemAtSpot); 
}