Java 检查数组中的特定元素是否包含特定字符串。然后删除该元素
我有一个ArrayList包含:[2x,5,6x]。我想去掉包含“x”的元素,但contains()方法适用于ArrayList中的所有元素 我的尝试: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设置
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”