我有一个字符串数组,我想删除该数组中的特定字符串。我怎样才能做到这一点?我的代码是:
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
。
答案 0 :(得分:2)
我依赖于“从数组中删除特定字符串”的含义。如果你想删除它的值,你可以简单地将它的值设置为null,但是如果你的意思是从数组中实际删除那个元素(你有一个包含5个元素的数组,你想要在删除元素后得到结果为4),如果不删除项目而复制数组,则无法做到这一点。
如果您需要此行为,可能需要查看动态列表,例如ArrayList或LinkedList
编辑:如果你想要一个简单的方法将数组复制到一个删除了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有解决方案。