编写一个程序,该程序读入一系列名字,并通过将它们存储在Set中来消除重复项。允许用户搜索名字。
(相信我,我没有参加任何Java课程。所以,不是我的作业)。
我的问题是要实现这一点:允许用户搜索名字。
其他一切都有效,只有搜索功能。
到目前为止我的代码....
package com.Sets;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class DuplicateElimination {
public static void main(String[] args) {
// Write a program thats ask for first names and store it in an array.
String fName;
Scanner input = new Scanner(System.in);
String[] names = new String[10];
for (int i = 0; i < names.length; i++) {
System.out.println("Enter First Name: ");
names[i] = input.nextLine();
}
// Printout that array as a list.
List<String> list = Arrays.asList(names);
// Initial Array Elements
System.out.printf("%s ", list);
System.out.println();
// Calling removeDuplicates method
removeDuplicates(list);
}
// Make a method called removeDuplicates.
private static void removeDuplicates(Collection<String> values) {
// Implement a Hashset in it.
Set<String> set = new HashSet<String>(values);
// Printout a non-duplicate list of elements.
for (String value : set) {
System.out.printf("%s ", value);
}
System.out.println();
}
// Make a method to search for a first name.
public static void searchForName(Collection<String> names) {
String someName;
Set<String> set = new HashSet<String>(names);
Scanner input = new Scanner(System.in);
for (int i = 0; i <= 10; i++) {
System.out.println("Search this name: ");
someName = input.nextLine();
}
if (someName ) {
} else {
}
}
}
我对我的searchForName方法没有信心...有人可以就如何使这项工作有所了解吗?
答案 0 :(得分:1)
考虑让removeDuplicates
返回Set
。将Set
传递给searchForName
。然后使用Set.contains
。
答案 1 :(得分:1)
public static boolean searchForName(Collection<String> names, String someName)
{
Set<String> set = new HashSet<String>(names);
return set.contains(someName);
}
答案 2 :(得分:1)
使用set.contains()
方法检查集合是否包含输入字符串。
for (int i = 0; i <= 10; i++) {
System.out.println("Search this name: ");
someName = input.nextLine();
}
if(set.contains(someName)) {
System.out.println("set contains name");
}
else {
System.out.println("set doesnt contain this name");
}
答案 3 :(得分:1)
您可以使用A TreeSet,然后使用tailSet和headSet 按字母顺序查找所有“大于或等于”和“小于或等于”搜索关键字的元素。
final TreeSet<String> p = new TreeSet<String>();
p.addAll(Arrays.asList(new String[] { "aaaaaa", "bbbbbbb", "cccccc", "dddddd", "eeeeeee", "fffff" }));
System.out.println(p.headSet("dd", true));
System.out.println(p.tailSet("dd", true));
结果:
[aaaaaa, bbbbbbb, cccccc]
[dddddd, eeeeeee, fffff]
tailSet的第一个元素是以搜索键(“dd”)开头的键。 有一个问题 - 如果找不到姓“dddddd”,tailSet会返回:
[eeeeeee, fffff]
所以你总是要检查第一个元素是否与之跳过(“dd”),否则就是NotFound!