Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-从包含指定字符串的ArrayList中删除字符串_Java_List - Fatal编程技术网

Java-从包含指定字符串的ArrayList中删除字符串

Java-从包含指定字符串的ArrayList中删除字符串,java,list,Java,List,有时,由于收集到错误的数据,通过以下方法生成的行在保存时会变成这样:“,-1,0”或类似的内容,没有名称,ID为-1,级别为115或其他内容。(行的格式如下(不包括引号):“姓名、id、级别”(例如:“仪仗队,5514115”) 我需要做的是删除monstersToAdd中包含-1的所有字符串。 我尝试过这个,但没有成功: private void combineInfo() { for(int i = 0; i < monsterList.size(); i++){

有时,由于收集到错误的数据,通过以下方法生成的行在保存时会变成这样:“,-1,0”或类似的内容,没有名称,ID为-1,级别为115或其他内容。(行的格式如下(不包括引号):“姓名、id、级别”(例如:“仪仗队,5514115”)

我需要做的是删除monstersToAdd中包含-1的所有字符串。 我尝试过这个,但没有成功:

private void combineInfo() {
    for(int i = 0; i < monsterList.size(); i++){
        monstersToAdd.add("" + names[i] + "," + IDs[i] + "," + levels[i]);
    }
    monstersToAdd.remove(monstersToAdd.contains("-1"));
}
private void combineInfo(){
对于(int i=0;i
通过行
monstersToAdd.remove(monstersToAdd.contains(“-1”);
我试图删除monstersToAdd中包含“-1”的所有字符串。但是,这不起作用,可能是出于一些原因,不幸的是,我还不知道这一点


如果您有任何意见,我将不胜感激:)。

您最好不要首先添加不需要的行

for (....) {
  if (IDs[i] != -1) {
    // add it
  }
  // else it simply doesn't get added
}
关于原始代码的更多信息:您可以发布更多细节,例如
monsterToAdd
的类型。如果它是一个非泛型列表,那么
contains
方法只返回
true
false
,这取决于参数(此处为“-1”字符串)是否在传递时正好出现在列表中,也就是说,它不搜索列表元素的子字符串匹配项

remove
然后尝试删除您请求删除的元素,该元素可能是一个
布尔
对象,自动从
包含的
返回的
布尔
原语值中装箱


另外,您可能有一个名为
monsterList
的变量,用于计算迭代长度,但实际上没有使用该列表中的任何元素。也许您使用的数组与列表具有相同的值,并且是事先复制的?如果是这样的话,最好直接迭代
怪物列表
并使用它的元素。

最好不要首先添加不需要的行

for (....) {
  if (IDs[i] != -1) {
    // add it
  }
  // else it simply doesn't get added
}
关于原始代码的更多信息:您可以发布更多细节,例如
monsterToAdd
的类型。如果它是一个非泛型列表,那么
contains
方法只返回
true
false
,这取决于参数(此处为“-1”字符串)是否在传递时正好出现在列表中,也就是说,它不搜索列表元素的子字符串匹配项

remove
然后尝试删除您请求删除的元素,该元素可能是一个
布尔
对象,自动从
包含的
返回的
布尔
原语值中装箱

另外,您可能有一个名为
monsterList
的变量,用于计算迭代长度,但实际上没有使用该列表中的任何元素。也许您使用的数组与列表具有相同的值,并且是事先复制的?如果是这样的话,最好直接迭代
怪物列表
,并使用其元素。

您真的很接近:

private void combineInfo() {
    for(int i = 0; i < monsterList.size(); i++){
        if (IDs[i] == -1) continue; // Skip this iteration
        monstersToAdd.add("" + names[i] + "," + IDs[i] + "," + levels[i]);
    }
}
private void combineInfo(){
对于(int i=0;i
尽可能早地过滤掉它们,而不是回溯和删除它们。

你真的很接近:

private void combineInfo() {
    for(int i = 0; i < monsterList.size(); i++){
        if (IDs[i] == -1) continue; // Skip this iteration
        monstersToAdd.add("" + names[i] + "," + IDs[i] + "," + levels[i]);
    }
}
private void combineInfo(){
对于(int i=0;i

尽早过滤掉它们,而不是回溯并删除它们。

为什么不这样做呢:

private void combineInfo() {
for(int i = 0; i < monsterList.size(); i++){
    if(IDs[i] != -1){
        monstersToAdd.add("" + names[i] + "," + IDs[i] + "," + levels[i]);
    }
}
monstersToAdd.remove(monstersToAdd.contains("-1"));
private void combineInfo(){
对于(int i=0;i
}


这样,如果ID为-1,您就永远不会将怪物添加到列表中。

为什么不这样做呢:

private void combineInfo() {
for(int i = 0; i < monsterList.size(); i++){
    if(IDs[i] != -1){
        monstersToAdd.add("" + names[i] + "," + IDs[i] + "," + levels[i]);
    }
}
monstersToAdd.remove(monstersToAdd.contains("-1"));
private void combineInfo(){
对于(int i=0;i
}

这样,如果ID为-1,您就不会首先将怪物添加到列表中。

contains()
根据列表是否包含给定的输入对象(在您的示例中是字符串“-1”)只返回真/假结果。因此,在您的示例中,您的列表不包含“-1”,因此您的remove语句将解析为:

monstersToAdd.remove(false);
由于明显的原因,它不起作用。

contains()
根据列表是否包含给定的输入对象(在您的示例中是字符串“-1”)只返回真/假结果。因此,在您的示例中,您的列表不包含“-1”,因此您的remove语句将解析为:

monstersToAdd.remove(false);
由于明显的原因,这不起作用。

以下是代码:

for(Iterator<String> it = monsterList; it.hasNext();) {
    String elem = it.next();
    if (elem.contains("-1")) {
         it.remove();
    }
}
for(迭代器it=monsterList;it.hasNext();){
String elem=it.next();
if(元素包含(“-1”)){
it.remove();
}
}
contains()。在本例中,您希望使用字符串的contains(),如果该字符串包含指定的子字符串,则该字符串将返回true。这就是您需要循环的原因。
此循环必须使用迭代器实现。使用新的java 5语法
for(String elem:list)
在这里不起作用,因为您必须删除元素。将
用于(int i=0;i
需要实现