大家好,我正在尝试从字符串数组中删除用户输入的名称,我是编程新手,但是我已经尝试过了,但是它不起作用。有人可以帮我还是告诉我我做错了什么?
String [] myName = {"Testname","Charel","melissa","Kelly"};
removeName(myName);
public void removeName(String[] names )
{
Scanner sc = new Scanner(System.in);
String name = "";
name = sc.nextLine();
for (int i = 0; i < names.length; i++) {
name = names[i-1];
}
}
我该怎么做?
答案 0 :(得分:0)
答案 1 :(得分:0)
首先,数组在初始化后不会更改大小,更改数组大小的唯一方法是将其替换为新数组!因此,为了避免出现重复输入或空白字段的情况,您需要制作一个短一个大小的新数组,并输入要保留的名称。
数组可能不适合您的目的,因此请考虑使用list或ArrayList。列表可以调整大小,因此删除元素会自动缩短列表。我建议您调查一下。
最后,您目前甚至没有将输入内容与字段进行比较。将name = names[i-1];
替换为
if(name.equals(names[i]))
//TODO: Remove from list
有关String.equals()的更多详细信息,请参见here!
还请记住,用户输入的名称可能根本不匹配,因此请为这种情况做好准备!
答案 2 :(得分:0)
要从Java中的数组中删除元素,您需要创建一个新数组并复制要保留的所有元素。那是因为Java数组是固定大小的。
例如,要删除特定索引处的元素,可以这样做:
public static String[] remove(String[] array, int index) {
String[] result = new String[array.length - 1];
System.arraycopy(array, 0, result, 0, index);
System.arraycopy(array, index + 1, result, index, result.length - index);
return result;
}
然后您将按照以下步骤从数组中删除melissa
:
String[] names = { "Testname", "Charel", "Melissa", "Kelly" };
names = remove(names, 2);
System.out.println(Arrays.toString(names));
输出
[Testname, Charel, Kelly]
当然,使用List
做起来会容易得多:
List<String> names = new ArrayList<>(Arrays.asList("Testname", "Charel", "Melissa", "Kelly"));
names.remove(2);
System.out.println(names);
或者:
List<String> names = new ArrayList<>(Arrays.asList("Testname", "Charel", "Melissa", "Kelly"));
names.remove("Melissa");
System.out.println(names);
两者的输出与上面相同。
答案 3 :(得分:0)
您可以执行以下操作:
使用String[]
:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String[] names = { "Testname", "Charel", "melissa", "Kelly" };
Scanner scanner = new Scanner(System.in);
System.out.println("The given list is: " + Arrays.toString(names));
System.out.print("Enter a name to remove: ");
String nameToRemove = scanner.nextLine();
String[] shortList = removeName(names, nameToRemove);
if (shortList != null && names != null && shortList.length == names.length - 1) {
System.out.println("The updated list is: " + Arrays.toString(shortList));
} else {
System.out.println("This name doesn't exist in the given list");
}
}
public static String[] removeName(String[] names, String nameToRemove) {
String[] tempList;
boolean found = false;
if (names != null && names.length > 0) {
tempList = new String[names.length];
for (int i = 0; i < names.length; i++) {
if (nameToRemove != null && nameToRemove.equals(names[i])) {
found = true;
} else {
tempList[i] = names[i];
}
}
if (found) {
String[] shortList = new String[names.length - 1];
int j = 0;
for (int i = 0; i < tempList.length; i++) {
if (tempList[i] != null) {
shortList[j++] = tempList[i];
}
}
return shortList;
}
}
return names;
}
}
示例运行:
The given list is: [Testname, Charel, melissa, Kelly]
Enter a name to remove: melissa
The updated list is: [Testname, Charel, Kelly]
使用ArrayList
:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
List<String> names = new ArrayList<String>(Arrays.asList("Testname", "Charel", "melissa", "Kelly"));
Scanner scanner = new Scanner(System.in);
System.out.println("The given list is: " + names);
System.out.print("Enter a name to remove: ");
String nameToRemove = scanner.nextLine();
removeName(names, nameToRemove);
}
public static void removeName(List<String> names, String nameToRemove) {
if (names == null || names.isEmpty()) {
System.out.println("Either the list is not initialized or it is empty");
return;
}
if (names.remove(nameToRemove)) {
System.out.println("The updated list is: " + names);
} else {
System.out.println("This name doesn't exist in the given list");
}
}
}
示例运行:
The given list is: [Testname, Charel, melissa, Kelly]
Enter a name to remove: melissa
The updated list is: [Testname, Charel, Kelly]
中所述
答案 4 :(得分:0)
jdk提供了一些使用Java api的简单方法,例如:
String [] myName = {"Testname","Charel","melissa","Kelly"};
List<String> container = new ArrayList(Arrays.asList(myName));
container.remove("Charel");
String[] result = new String[myName.length - 1];
container.toArray(result);
或者,您也可以使用此方法将数组转换为列表,
Collections.addAll(container, myName);
答案 5 :(得分:0)
String [] myName = {"Testname","Charel","melissa","Kelly"};
removeName(myName);
public void removeName(String[] names )
{
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
for (int i = 0; i < names.length; i++) {
if(names[i]==name)
{
for(int j=i;j<names.length-1;j++)
{
names[j]=names[j+1];
}
}
}
}