Java 找到具有特定字符的元素后,从ArrayList中删除元素

Java 找到具有特定字符的元素后,从ArrayList中删除元素,java,Java,我有一个包含许多字符串的ArrayList,我希望能够遍历ArrayList内容,搜索包含分号的字符串。找到分号后,我想删除所有的字符串,包括分号字符串和分号字符串之后的字符串 所以, this,is,an,arra;ylist,字符串 将成为: 这是一个 我觉得这是一件非常简单的事情,但由于某种原因(可能是疲劳),我不知道该怎么做 这是到目前为止我的代码 public String[] removeComments(String[] lineComponents) {

我有一个包含许多字符串的ArrayList,我希望能够遍历ArrayList内容,搜索包含分号的字符串。找到分号后,我想删除所有的字符串,包括分号字符串和分号字符串之后的字符串

所以,

this,is,an,arra;ylist,字符串

将成为:

这是一个

我觉得这是一件非常简单的事情,但由于某种原因(可能是疲劳),我不知道该怎么做

这是到目前为止我的代码

public String[] removeComments(String[] lineComponents)
    {
        ArrayList<String> list = new ArrayList<String>(Arrays.asList(lineComponents));

        int index = 0;
        int listLength = list.size();
        for(String str : list)
        {
            if(str.contains(";"))
            {

            }
            index++;
        }
        return lineComponents;
    }
public String[]删除组件(String[]行组件)
{
ArrayList=新的ArrayList(Arrays.asList(lineComponents));
int指数=0;
int listLength=list.size();
for(字符串str:list)
{
if(str.contains(;))
{
}
索引++;
}
返回线组件;
}

首先,我认为您混淆了数组和数组列表
String[]
是字符串数组,而
ArrayList
是字符串数组列表。考虑到这些不同,如果需要,您应该阅读Array和ArrayList文档

然后,要按照ArrayList方法解决您的问题,您可以按照以下步骤操作。也许这不是最好的方法,但它会起作用

public List<String> removeComments(List<String> lineComponents, CharSequence finding)
    {
        ArrayList<String> aux = new ArrayList<String>();

        for(String str : lineComponents)
        {
            if(str.contains(finding))
                break;
            else
                aux.add(str);
        }
        return aux;
    }
public List removeComments(列出lineComponents、字符序列查找)
{
ArrayList aux=新的ArrayList();
用于(字符串str:lineComponents)
{
if(str.contains(finding))
打破
其他的
辅助添加(str);
}
返回aux;
}

这在Java 9中变得微不足道:

public String[] removeComments(String[] lineComponents) {
    return Arrays.stream(lineComponents)
                 .takeWhile(s -> !s.contains(";"))
                 .toArray(String[]::new);
}

我们只需从您的
字符串[]lineComponents
中形成一个
,并获取元素,直到找到分号为止。它会自动排除带有分号的元素及其后面的所有内容。最后,我们将其收集到一个
字符串[]

这个示例只是为了提高性能,并带回我以前最喜欢的
arraycopy

public String[] removeComments(String[] lineComponents) {
    int index = -1;

    for (int i = 0; i < lineComponents.length; i++) {
        if ( lineComponents[i].contains(";") ) {
            index = i;
            break;
        }
    }

    if (index == -1) return lineComponents;

    return Arrays.copyOf(lineComponents, index);
}
public String[]删除组件(String[]行组件){
int指数=-1;
对于(int i=0;i
可能的重复(已接受的答案包含和示例
集合#removeIf
),如果所有元素都包含分号,则此选项有效。因为arraylist中只有一个字符串包含分号。我想删除该字符串及其后的所有字符串,然后,我会找到第一个匹配元素的索引,然后使用
ArrayList#subList
创建从指定的
索引
列表末尾的所有元素的子列表
,并使用
ArrayList#removeAll
删除我们在Java8中也应该能够做到的所有可能的重复:)@YogenraiJava8没有
流#takeWhile
,但仍然有办法复制它。