Java 检查数组中的特定元素是否包含特定字符串。然后删除该元素

Java 检查数组中的特定元素是否包含特定字符串。然后删除该元素,java,arrays,string,arraylist,Java,Arrays,String,Arraylist,我有一个ArrayList包含:[2x,5,6x]。我想去掉包含“x”的元素,但contains()方法适用于ArrayList中的所有元素 我的尝试: boolean ready = false; while(!ready){ if(first element in the array contains "x"){ remove that element Check next element in line } 选中所有元素并删除包含“x”的元素后,将ready设置

我有一个ArrayList包含:[2x,5,6x]。我想去掉包含“x”的元素,但contains()方法适用于ArrayList中的所有元素

我的尝试:

boolean ready = false;

while(!ready){
    if(first element in the array contains "x"){
    remove that element
    Check next element in line
}
选中所有元素并删除包含“x”的元素后,将ready设置为true,并停止循环。 我希望输出仅为:[6]。然后将其转换为int,而不是String

编辑: 我无法让它与ArrayList一起工作,因为我无法更改ArrayList的内容。因此,我将其更改为一个简单数组。 阵列现在是: String[]tokens=ligning2.split(“-\+\\\*\/”


因此令牌数组将保留[2x,5,6x]。那么,如何使用这种数组而不是Arraylist来删除包含x的元素呢?

这将是在调用
List\removeIf
时利用lambda的绝佳机会

例如:

List<String> list = Arrays.asList("2x", "5", "6x");

System.out.println(list); // [2x, 5, 6x]

list.removeIf(element -> element.contains("x"));

System.out.println(list); // [5]
整个算法可压缩为以下内容:

List<Integer> newList = list.stream()
                            .filter(element -> !element.contains("x"))
                            .map(Integer::valueOf)
                            .collect(Collectors.toList());
List newList=List.stream()
.filter(元素->!元素.contains(“x”))
.map(整数::valueOf)
.collect(Collectors.toList());

最简单的方法是使用
流。这些是在Java 8中添加的,您可以在您的案例中使用它们来过滤列表中的某些项目,并在一次运行中将它们转换为整数:

List<String> elements = Arrays.asList("2x", "5", "6x");
List<Double> result = elements.stream()
     .filter(entry -> !entry.contains("x"))
     .map(Double::valueOf) //this assumes that all other entries are valid doubles
     .collect(Collectors.toList());
List elements=Arrays.asList(“2x”、“5”、“6x”);
列表结果=elements.stream()
.filter(条目->!条目.contains(“x”))
.map(Double::valueOf)//这假设所有其他条目都是有效的Double
.collect(Collectors.toList());
  • 使用迭代器迭代列表
  • 对于每次迭代,如果当前
    字符串
    包含“x”
    字符串
    ,请使用
    迭代器将其从
    列表中删除。删除()
例如:

   for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
        String value = list.next();
        if(value.contains("x"){
           iterator.remove();
        }
    }
List<String> list = Arrays.asList("Hello", "xyz", "tkx");
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
    if(iter.next().contains("x")){//check if your element contain x
        iter.remove();//if yes remove it
    }
}
for(Iterator Iterator=list.Iterator();Iterator.hasNext();){ 字符串值=list.next(); if(值包含(“x”){ iterator.remove(); } }
您可以使用迭代器,例如:

   for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
        String value = list.next();
        if(value.contains("x"){
           iterator.remove();
        }
    }
List<String> list = Arrays.asList("Hello", "xyz", "tkx");
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
    if(iter.next().contains("x")){//check if your element contain x
        iter.remove();//if yes remove it
    }
}
List List=Arrays.asList(“Hello”、“xyz”、“tkx”);
迭代器iter=list.Iterator();
while(iter.hasNext()){
if(iter.next().contains(“x”){//检查元素是否包含x
iter.remove();//如果是,则将其删除
}
}

您可以使用此程序

package com.anand;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.ListIterator;

public class ArrayListRemove {
static ArrayList<String> al=new ArrayList<>(Arrays.asList("6x","8","5x"));
public static void main(String[] args) {
    Iterator<String> i=al.iterator();
    while(i.hasNext())
    {
        if(i.next().toString().contains("x"))
        {
            i.remove();
        }
    }
    ListIterator<String> li= al.listIterator();
    while(li.hasNext())
    {
        System.out.println(li.next());
    }

}

}
package com.anand;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Iterator;
导入java.util.ListIterator;
公共类arraylistermove{
静态ArrayList al=新的ArrayList(Arrays.asList(“6x”、“8”、“5x”));
公共静态void main(字符串[]args){
迭代器i=al.Iterator();
while(i.hasNext())
{
如果(i.next().toString()包含(“x”))
{
i、 删除();
}
}
ListIterator li=al.ListIterator();
while(li.hasNext())
{
System.out.println(li.next());
}
}
}

请让我知道你想创建一个新的整数数组列表或只是将输出为整数。我会相应地进行更改

@OusmaneMahyDiaw为什么在我的帖子中编辑拼写已经正确的单词?抱歉,我住在英国,因此我建议这是正确的方法,我想美国的拼写是di不同。但请注意,我也编辑了你的代码,因为如果我保持原样,它将无法编译。是的,谢谢你添加引号。在美国,它的拼写是“利用”;)@OusmaneMahyDiaw”“谢谢你的编辑(而不是简单的否决)。非常匆忙,甚至没有注意到我们在java中使用的那些错误。但是我可以看到你从(C)那里得到了
=>
,而且它不是
收集器。asList()
,而是
收集器。toList()
。这可能是个错误,我理解。我已经编辑过了+1.我犯了一个错误,没有告知它不是整数,但我想用double。你能把你的代码改成用双精度而不是整数吗?我试图将列表更改为双精度,但在
.collect(Collectors.toList())处出错编辑了我的答案。
Double
类还有
valueOf
方法,该方法接受字符串并尝试解析Double。有关此方法接受哪些内容作为有效输入的详细文档可在此处找到:nice classic solution^^.@YCF\L如何避免:UnsupportedOperationException错误?我知道它为什么在那里,但我不知道如何避免它。我试图使用“普通”数组,但我不知道该怎么办。@Bassus很抱歉这么晚才发表评论,你是什么意思?正如我对@JacobG所说的,我得到了以下错误:java.lang.UnsupportedOperationException。我也看过其他遇到这个问题的人,但是他们的ArrayList和我的不同,因为我把它拆分了。我的是:
List-asList=Arrays.asList(ligning2.split(“-\\\+\\\\\*\\\/”)JacobG解决方案无法工作。不要将
数组.asList(…)
removeIf()方法混合使用<代码>数组。asList(..)
生成一个不可修改的数组列表。使用
new ArrayList()
创建您的列表,然后使用
add(…)
方法迭代拆分产生的数组,以填充
ArrayList
。我更像是一个初学者,因此如果您能给我举个例子,我会非常激动。我有一个字符串变量,包含“2x+3”。我用
split(“-\\+\\\\*\\\\/”
来拆分它,我如何用
新的ArrayList()
来代替
数组。asList(…)
?我不确定你所说的迭代是什么意思。如果我没有将节点列表包含到标记中,我会出错,所以我这样做了:
NodeList token=split(“-\\+\\\\\*\\\/”。我得到的下一个错误是for(stringcurrent:token)
,它给出了“foreach不适用于表达式t”