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);
}
}