删除字符串

时间:2009-07-15 09:23:51

标签: java

我有一个字符串数组,我想删除该数组中的特定字符串。我怎样才能做到这一点?我的代码是:

 private void nregexp(){
        String str_nregexp = i_exp_nregexp.getText();
        boolean b;
        for(int i=0; i<selectedLocations.length; i++){
            b=  selectedLocations[i].indexOf(str_nregexp) > 0;
            if(b){
                String i_matches = selectedLocations[i];
                ........
                ........
            }
        }
    }

我必须从i_matches删除selectedLocations

6 个答案:

答案 0 :(得分:2)

我依赖于“从数组中删除特定字符串”的含义。如果你想删除它的值,你可以简单地将它的值设置为null,但是如果你的意思是从数组中实际删除那个元素(你有一个包含5个元素的数组,你想要在删除元素后得到结果为4),如果不删除项目而复制数组,则无法做到这一点。

如果您需要此行为,可能需要查看动态列表,例如ArrayListLinkedList

编辑:如果你想要一个简单的方法将数组复制到一个删除了String的数组中,你可以这样做:

List<Foo> fooList = Arrays.asList(orgArray);
fooList.remove(itemToRemove);
Foo[] modifiedArray = fooList.toArray();

答案 1 :(得分:1)

您需要将数组复制到较小的数组,省略您不想要的字符串。如果这是一种常见情况,则应考虑使用除数组之外的其他内容,例如LinkedList或ArrayList。

答案 2 :(得分:1)

如果真的想自己做,那么这是一个例子:

import java.util.Arrays;
public class DelStr {
    public static String[] removeFirst(String[] array, String what) {
        int idx = -1;
        for (int i = 0; i < array.length; i++) {
            String e = array[i];
            if (e == what || (e != null && e.equals(what))) {
                idx = i;
                break;
            }
        }
        if (idx < 0) {
            return array;
        }
        String[] newarray = new String[array.length - 1];
        System.arraycopy(array, 0, newarray, 0, idx);
        System.arraycopy(array, idx + 1, newarray, idx, array.length - idx - 1);
        return newarray;
    }
    public static void main(String[] args) {
        String[] strings = { "A", "B", "C", "D" };
        System.out.printf("Before: %s%n", Arrays.toString(strings));
        System.out.printf("After: %s%n", 
            Arrays.toString(removeFirst(strings, "D")));
    }
}

答案 3 :(得分:0)

你能告诉我们你的代码吗?为什么不使用ArrayList,因为它有remove(index)和remove(object)支持?

编辑:也许

private void nregexp() {
    String str_nregexp = i_exp_nregexp.getText();
    boolean b;
    List<String> list = new ArrayList<String>(Arrays.asList(selectedLocations)); 
    for(Iterator<String> it = list.iterator(); i.hasNext();){
        String e = it.next();
        b =  e.indexOf(str_nregexp) > 0;
        // b = e.matches(str_regexp); // instead?
        if(b){
            String i_matches = s;
            it.remove(); // we don't need it anymore
            ........
            ........
        }
    }
    selectedLocations = list.toArray(new String[list.size()]);
}

答案 4 :(得分:0)

在初始化数组后,您无法更改数组的长度。所以你不能直接删除元素,你只能替换它,也可以用null。

String[] arr = new String[10];
// fill array
...
// replace the fifth element with null
arr[4] = null;

如果你想改变数组的长度,你应该尝试一个列表:

List<String> list = new ArrayList<String>();
// fill list
...
// remove the fifth element
list.remove(4);

答案 5 :(得分:0)

我已达到此解决方案,允许您删除所有与删除元素相同的元素:

private static <T> T[] removeAll(T[] array, T element) {
    if (null == array)
        throw new IllegalArgumentException("null array");
    if (null == element)
        throw new IllegalArgumentException("null element");

    T[] result = (T[]) Array.newInstance(array.getClass().getComponentType(), array.length);

    int j = 0;
    for (int i = 0; i < array.length; i++) {
        if (!element.equals(array[i]))
            result[j++] = array[i];
    }
    return Arrays.copyOf(result, j);
}

我也做了一些基准测试,这个解决方案肯定比使用列表更好。虽然,如果性能不是问题,我会使用列表。

如果你真的只需要删除一个元素(第一个)@kd304有解决方案。