Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/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 从字符串数组中删除特定字符串_Java_Arrays_String - Fatal编程技术网

Java 从字符串数组中删除特定字符串

Java 从字符串数组中删除特定字符串,java,arrays,string,Java,Arrays,String,我有这样一个数组: String n[] = {"google","microsoft","apple"}; String r = myAL[rgenerator.nextInt(myAL.length)]; 我想做的是删除“苹果” 我的问题是非常基本的,但是,我搜索了网站,发现java并不真正支持从数组中删除功能。我还听说使用java Utils,因为删除一个项目非常简单……我试图在google上找到java Utils,但几乎所有的链接都没有了 最后…有没有办法从字符串数组中删除字符串

我有这样一个数组:

String n[] = {"google","microsoft","apple"};
String r = myAL[rgenerator.nextInt(myAL.length)];
我想做的是删除“苹果”

我的问题是非常基本的,但是,我搜索了网站,发现java并不真正支持从数组中删除功能。我还听说使用java Utils,因为删除一个项目非常简单……我试图在google上找到java Utils,但几乎所有的链接都没有了

最后…有没有办法从字符串数组中删除字符串

即使我使用ArrayList,我也找不到在其中生成随机项的方法!例如:在普通数组中,我生成如下字符串:

String n[] = {"google","microsoft","apple"};
String r = myAL[rgenerator.nextInt(myAL.length)];

在arraylist中,它不起作用……也许您知道一个解决方案……

Java中的数组与集合类不同,不是动态的。如果需要支持动态添加和删除的真实集合,请使用ArrayList。如果您仍然希望使用普通数组,请找到字符串的索引,构造一个比原始数组小1的新数组,并使用
System.arraycopy()
复制前后的元素。或者手动使用skip编写一个复制循环,在小数组上,差异可以忽略不计。

您无法从数组中删除任何内容-它们的长度始终是固定的。创建长度为3的数组后,该数组的长度将始终为3

您最好使用
列表
,例如
数组列表

List List=new ArrayList();
添加(“谷歌”);
列表。添加(“microsoft”);
添加(“苹果”);
System.out.println(list.size());//3.
列表。删除(“苹果”);
System.out.println(list.size());//2.
像这样的集合通常比直接使用数组灵活得多

编辑:要删除:

void removeRandomElement(List<?> list, Random random)
{
    int index = random.nextInt(list.size());
    list.remove(index);
}
void removeandomeElement(列表,随机)
{
int index=random.nextInt(list.size());
列表。删除(索引);
}
定义“删除”

数组是固定长度的,创建后无法调整大小。您可以将元素设置为
null
,以删除对象引用

for (int i = 0; i < myStringArray.length(); i++)
{
    if (myStringArray[i].equals(stringToRemove))
    {
        myStringArray[i] = null;
        break;
    }
}
如果您想要一个动态大小的数组,其中对象被实际删除,并且列表(数组)大小也相应调整,请使用

编辑以回应OP对其以下问题和评论的编辑

String r = myArrayList.get(rgenerator.nextInt(myArrayList.size()));

在步骤中不可能,或者需要保留对数组的引用。 如果您可以更改参考,这将有助于:

      String[] n = new String[]{"google","microsoft","apple"};
      final List<String> list =  new ArrayList<String>();
      Collections.addAll(list, n); 
      list.remove("apple");
      n = list.toArray(new String[list.size()]);
String[]n=新字符串[]{“谷歌”、“微软”、“苹果”};
最终列表=新的ArrayList();
Collections.addAll(列表,n);
列表。删除(“苹果”);
n=list.toArray(新字符串[list.size()]);
我不推荐以下方法,但如果您担心性能:

      String[] n = new String[]{"google","microsoft","apple"};
      final String[] n2 = new String[2]; 
      System.arraycopy(n, 0, n2, 0, n2.length);
      for (int i = 0, j = 0; i < n.length; i++)
      {
        if (!n[i].equals("apple"))
        {
          n2[j] = n[i];
          j++;
        }      
      }
String[]n=新字符串[]{“谷歌”、“微软”、“苹果”};
最终字符串[]n2=新字符串[2];
数组复制(n,0,n2,0,n2.长度);
for(int i=0,j=0;i

我不推荐它,因为代码更难阅读和维护。

您可能参考了包
java.util
,其中包含了下面人们用来回答您问题的一些类,例如
List
ArrayList
,标准Java库附带了它-不需要单独下载。不!!你想删除Microsoft。没关系,但我还需要从该列表中生成一个随机项。。。。在普通数组中很容易做到,但是在arraylist中很难做到…如果你知道如何做到,请告诉我…为什么“很难做到”?ArrayList提供与数组相同的随机访问(通过索引)。请参阅上面的编辑。我建议使用(myStringArray[I].equalsIgnoreCase(stringToRemove))。这将确保无论用户输入的类型如何,大小写都不会阻止从数组中删除字符串。这没关系,但我还需要从该列表中生成一个随机项。。。。在普通数组中很容易做到,但是在arraylist中很难做到…如果你知道怎么做,请告诉我…@user1015311:不,你可以用与数组相同的方法来做-你只需根据索引而不是值进行删除。获取一个
int
时,有一个超负荷的
remove
。只需在范围
[0,list.size()]
中创建一个随机数,然后调用
list.remove(index)。更不用说效率极低;所有的复制都不是免费的。这就是ArrayList被发明的原因。
import java.util.*;

class Array {
    public static void main(String args[]) {
        ArrayList al = new ArrayList();
        al.add("google");
        al.add("microsoft");
        al.add("apple");
        System.out.println(al);
        //i only remove the apple//
        al.remove(2);
        System.out.println(al);
    }
}
      String[] n = new String[]{"google","microsoft","apple"};
      final String[] n2 = new String[2]; 
      System.arraycopy(n, 0, n2, 0, n2.length);
      for (int i = 0, j = 0; i < n.length; i++)
      {
        if (!n[i].equals("apple"))
        {
          n2[j] = n[i];
          j++;
        }      
      }
import java.util.*;

class Array {
    public static void main(String args[]) {
        ArrayList al = new ArrayList();
        al.add("google");
        al.add("microsoft");
        al.add("apple");
        System.out.println(al);
        //i only remove the apple//
        al.remove(2);
        System.out.println(al);
    }
}