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